设有n个正整数(C语言)

7、设有n个正整数,n<=20,每个正整数均在int范围内,将它们连成一排组成一个最小的多位整数,并将结果保存至文件。

因为最多需要连接20个正整数,int最多是10位数,20个10位数就是200位,用整数数据类型无法存储这么多数位,所以用的字符串存储的,我使用的IDE是Dev-Cpp, 使用它运行程序,会在生成exe的那个目录下生成result.txt,如果使用的是其他IDE可能有所不同,下面是一个实现,供参考:

#include <stdio.h>

//将数字每个数位提取后存入字符串中 
int numToStr(int num,char * str){
    
    int i=0;
    int sum=0;
    int numtemp=num;
    int t;
    int weight=1;
    
    int k=0;
    int numtemp2 = num;
    //计算正整数有多少位 
    while(sum!=numtemp){
        t=numtemp2%10;
        sum+=t*weight;        
        numtemp2/=10;
        weight*=10;
        k++;
    }
    
    sum=0;
    i=0;
    weight=1;
    //把每个数位依次存入字符串中 
    while(sum!=numtemp){
        t=num%10;
        sum+=t*weight;
        str[k-1-i]=t+'0';
        num/=10;
        weight*=10;
        i++;
    }
    
    return i; //返回正整数有几位,便于main函数里拼接下一个数 
    
} 

int main(void){
    
    int nums[20]; //最多20个正整数 
    //使用字符数组来存储连接的这个正整数 
    //假如输入了20个正整数,int最大21亿多,就是最长10位数,20乘以10等于200,加上结尾的空字符最长是201个字符 
    char numStr[201]; 
    
    int i=0;
    int n;
    printf("请输入要连接多少个正整数:");
    scanf("%d",&n); 
    while(i<n){
        printf("请输入第%d个正整数:",i+1); 
        scanf("%d",&nums[i]);
        i++;
    }
    
    //对输入的正整数从小到大排序,然后依次把他们连接到字符数,
    //从小到大连接能形成一个最小的多位数
    int j;
    int temp;
    for(i=0;i<n-1;i++){
        for(j=i;j<n;j++){
            if(nums[i]>nums[j]){
                temp=nums[i];
                nums[i]=nums[j];
                nums[j]=temp;
            }
        } 
    }
    
    int len=0;
    int allLen =0;
    //将排序后数组数字依次存入字符串中 
    for(i=0;i<n;i++){
        allLen+=len;
        len=numToStr(nums[i],numStr+allLen);
    }
    allLen+=len;
    numStr[allLen]='\0';
    
    printf("%s",numStr);
    
    FILE * fp = fopen("result.txt","w+");
    //写入文件 
    if(fp==NULL){
        printf("文件打开或创建失败!\n");
        return -1;
    }
    
    fprintf(fp,"%s",numStr);
    
    return 0; 
} 
    

img