Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- using namespace std;
- int Ghep_So(int Len, int sieuXau[], int size);
- int NumberLen(int n);
- int Supper_Ugly_Number(int n);
- int n;
- int main()
- {
- cout << "Nhap n = ";
- cin >> n;
- if (n >= 0 && n <= 10000) cout << "\nSo sieu sau = "<<Supper_Ugly_Number(n);
- else cout << "So ban nhap khong hop le";
- }
- int Supper_Ugly_Number(int n)
- {
- if (n<=10) {
- if (n%2 == 0) return n+1;
- else return n+2;
- } else if (n==99) return 111;
- else if (n==999) return 1111;
- else if (n==9999) return 11111;
- int Len = NumberLen(n);
- int Truc = roundf((float)Len/2);
- int sieuXau[Truc], soHang[Len];
- int so_tam = n;
- for (int i = Len-1; i >=0; i--)
- {
- soHang[i] = so_tam%10;
- so_tam = so_tam / 10;
- }
- for (int i = 0; i < Truc; i++)
- {
- if (soHang[i] % 2 == 0) {
- sieuXau[i]=soHang[i]+1;
- for (int j = i+1; j < Len; j++) {
- sieuXau[j]= 1;
- }
- break;
- }
- else sieuXau[i]=soHang[i];
- }
- int number = Ghep_So(Len,sieuXau,Truc);
- if (number <= n) {
- sieuXau[Truc-1] += 2;
- for (int i = Truc-1; i>=0; i--) {
- if (sieuXau[i]>9) {
- sieuXau[i]=1;
- for (int j = i-1; j >=0; j--) {
- sieuXau[j] += 2;
- if (sieuXau[j] >9) sieuXau[j]=1;
- else break;
- }
- break;
- } else break;
- }
- number = Ghep_So(Len,sieuXau,Truc);
- }
- return number;
- }
- int Ghep_So(int Len, int sieuXau[], int size)
- {
- int number = 0;
- if (Len % 2 == 0) {
- for (int i = 0; i < size; i++) number += sieuXau[i]*pow(10,i);
- int so_tam = 0;
- for (int i = 0; i < size; i++) so_tam += sieuXau[i]*pow(10,size-i-1);
- so_tam = so_tam * pow(10,size);
- number += so_tam;
- } else {
- for (int i = 0; i < size-1; i++) number += sieuXau[i]*pow(10,i);
- int so_tam = 0;
- for (int i = 0; i < size; i++) so_tam += sieuXau[i]*pow(10,size-i-1);
- so_tam = so_tam * pow(10,size-1);
- number += so_tam;
- }
- return number;
- }
- int NumberLen(int n)
- {
- int so_tam = n;
- int number = 0;
- do {
- number++;
- so_tam /= 10;
- if (so_tam == 0) break;
- } while (1);
- return number;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement