1000位的数字!!看来只能输入字符串了。。。

下面是某大大的代码,思路就是从2到9中找出能被N整除的数,然后打印出最小的组合

大数相那一段很值得学习!
#include <iostream>
#include 
<string>
#include 
<vector>
#include 
<cmath>
using namespace std;

#define  MAXCHAR 1002

void Div(char *ch1, char *ch2, char *ch3) {
    
char temp[MAXCHAR];
    
int i;
    memset(ch3,
0,sizeof(ch3));
    
int num=ch2[0]-'0';
    
int len=strlen(ch1);
    
int s=0;
    
for(i=0;i<len;i++){       //大数相除
        s=s*10+ch1[i]-'0';
        ch3[i]
=s/num+'0';
        s
%=num;
    }

    
int flag=0;
    
int j=0;
    
for(i=0;i<len;i++){
        
if(flag==0&&ch3[i]=='0')
            
continue;
        flag
=1;
        temp[j]
=ch3[i];
        j
++;
    }

    temp[j]
='\0';
    strcpy(ch3,temp);
}

bool op(char *num,int t){
    
int len=strlen(num);
    
int i,j,k;
    k
=0;
    
for(i=0;i<len;i++){
        k
=k*10+num[i]-'0';
        k
=k%t;
    }

    
if(k==0)
        
return true;
    
else
        
return false;
}

int main() {
    
char num[MAXCHAR], s[300];
    
char temp[MAXCHAR];
    
char aaa[MAXCHAR];
    
int i, j;
    
int ans[10][2];
    
while (1{
        scanf(
"%s"&num);
        
if(num[1]=='\0'){
            printf(
"1%c\n",num[0]);
            
continue;
        }

        memset(ans, 
0sizeof (ans));
        
if (num[0== '-')
            
break;
        
for (i = 9; i >= 2; i--{
            s[
0]=i+'0';
            s[
1]='\0';
            strcpy(temp, num);           
            
while (1{
                
if (op(temp,i) ) {
                    Div(temp,s,aaa);
                    strcpy(num,aaa);
                    ans[i][
0]=1;
                    ans[i][
1]++;
                    strcpy(temp,num);
                }

                
else
                    
break;
            }

            
if(num[1]=='\0')
                
break;
        }

        
if(num[1]!='\0'){
            printf(
"There is no such number.\n");
            
continue;
        }

        ans[num[
0]-'0'][0]=1;
        ans[num[
0]-'0'][1]++;
        
for (i = 2; i < 10; i++{
            
if (ans[i][0= 1{
                
for (j = 0; j < ans[i][1]; j++)
                    printf(
"%d", i);
            }

        }

        printf(
"\n");
    }

    
return 0;
}