Advertisement
EckOp

Số siêu xấu

Jun 5th, 2016
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3.  
  4. using namespace std;
  5. int Ghep_So(int Len, int sieuXau[], int size);
  6. int NumberLen(int n);
  7. int Supper_Ugly_Number(int n);
  8. int n;
  9.  
  10. int main()
  11. {
  12.     cout << "Nhap n = ";
  13.     cin >> n;
  14.     if (n >= 0 && n <= 10000) cout << "\nSo sieu sau = "<<Supper_Ugly_Number(n);
  15.     else cout << "So ban nhap khong hop le";
  16. }
  17. int Supper_Ugly_Number(int n)
  18. {
  19.     if (n<=10) {
  20.         if (n%2 == 0) return n+1;
  21.         else return n+2;
  22.     } else if (n==99) return 111;
  23.     else if (n==999) return 1111;
  24.     else if (n==9999) return 11111;
  25.    
  26.     int Len = NumberLen(n);
  27.     int Truc = roundf((float)Len/2);
  28.     int sieuXau[Truc], soHang[Len];
  29.     int so_tam = n;
  30.     for (int i = Len-1; i >=0; i--)
  31.     {
  32.         soHang[i] = so_tam%10;
  33.         so_tam = so_tam / 10;
  34.     }
  35.     for (int i = 0; i < Truc; i++)
  36.     {
  37.         if (soHang[i] % 2 == 0) {
  38.             sieuXau[i]=soHang[i]+1;
  39.             for (int j = i+1; j < Len; j++) {
  40.                 sieuXau[j]= 1;
  41.             }
  42.             break;
  43.         }
  44.         else sieuXau[i]=soHang[i];
  45.     }
  46.     int number = Ghep_So(Len,sieuXau,Truc);
  47.     if (number <= n) {
  48.         sieuXau[Truc-1] += 2;
  49.         for (int i = Truc-1; i>=0; i--) {
  50.             if (sieuXau[i]>9) {
  51.                 sieuXau[i]=1;
  52.                 for (int j = i-1; j >=0; j--) {
  53.                     sieuXau[j] += 2;
  54.                     if (sieuXau[j] >9) sieuXau[j]=1;
  55.                     else break;
  56.                 }
  57.                 break;
  58.             } else break;
  59.         }
  60.         number = Ghep_So(Len,sieuXau,Truc);
  61.     }
  62.     return number;
  63. }
  64. int Ghep_So(int Len, int sieuXau[], int size)
  65. {
  66.     int number = 0;
  67.     if (Len % 2 == 0) {
  68.         for (int i = 0; i < size; i++) number += sieuXau[i]*pow(10,i);
  69.         int so_tam = 0;
  70.         for (int i = 0; i < size; i++) so_tam += sieuXau[i]*pow(10,size-i-1);
  71.         so_tam = so_tam * pow(10,size);
  72.         number += so_tam;
  73.     } else {
  74.         for (int i = 0; i < size-1; i++) number += sieuXau[i]*pow(10,i);
  75.         int so_tam = 0;
  76.         for (int i = 0; i < size; i++) so_tam += sieuXau[i]*pow(10,size-i-1);
  77.         so_tam = so_tam * pow(10,size-1);
  78.         number += so_tam;
  79.     }
  80.     return number;
  81. }
  82. int NumberLen(int n)
  83. {
  84.     int so_tam = n;
  85.     int number = 0;
  86.     do {
  87.         number++;
  88.         so_tam /= 10;
  89.         if (so_tam == 0) break;
  90.     } while (1);
  91.     return number;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement