HDU 5718 Oracle

来源:互联网 发布:股市大数据 编辑:程序博客网 时间:2024/06/06 00:17
#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N=10000005;//数组要足够大int a[N];char s[N];int main(){    bool compare(int,int);    int count0(char*);    int t;    scanf("%d",&t);    while(t>0){        scanf("%s",s);    //要用字符数组读入 试过string读入但是会超时        int c=count0(s);        int l=strlen(s);        if((l==1)||(c==l-1)){   //个位数和只有一个正整数时不能拆分            printf("%s\n","Uncertain");             }           else{            for(int i=1;i<=l;i++){                a[i]=s[i-1]-'0';   //用int数组存储结果 原因后面会讲                }            a[0]=0;   //为了进位所以从a[1]开始读原有数据            sort(a+1,a+l+1,compare);  //数据从大到小排列            if(c>1){    //考虑有两个或以上0的情况                for(int i=l;i>1;i--){   //最小数+剩下整数                    if(a[i]!=0){                        a[l-1]=a[i];                        a[i]=0;                        break;                    }                                       }            }            else{                a[l-1]+=a[l];  //直接相加 这里配合后面的取模可以体现出用int数组的优点                for(int i=l-1;i>0;i--){                    if(a[i]>9){                        a[i-1]++;                        a[i]%=10;                    }                    else{                        break;                    }                }            }            if(a[0]){                printf("%d",a[0]);            }               for(int i=1;i<l;i++){                printf("%d",a[i]);            }            printf("\n");        }            t--;                    }       }bool compare(int a,int b){    if(a>b) return true;    else return false; }int count0(char* s){    //统计数据中0的个数    int c=0;    for(int k=0;k<strlen(s);k++){        if(s[k]==(0+'0')){            c++;        }       }    return c;}


1.用int数组存储数据 一个是便于配合进位取模操作得到最后结果 还有一个就是如果使用char数组计算过程中很容易类型转换或是加减时漏了’0’ 数组存储是因为数字太大 防止溢出 
2.大概思路是考虑uncertain情况 考虑两个以上0的情况 考虑进位情况 以及普通的加减 建议测试的数据 5 10 99 3200 99999999999(一堆9) 测试99的时候就能体会到int数组的好处了~ 
3.本题因为改了时间限制所以可以用sort函数 暂时还没有考虑不能用sort的情况 
4.一定要用scanf输入字符数组 哪怕只cin一个string类型也会过不掉 
5.暂时没有想到更多了
                                             
1 0