BestCoder 2nd Anniversary 1001 Oracle

找到最小的非零数字拆开来相加。

高精度。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 using namespace std;
 7 #define LL long long
 8 char s[10000005];
 9 int a[10000005],b[10000005];
10 int t,p;
11 int main()
12 {
13     scanf("%d",&t);
14     while(t--)
15     {
16         scanf("%s",s);
17         int len=strlen(s);
18         p=0;
19         if(len==1)//只有一个数字,不符合 
20         {
21             puts("Uncertain"); continue;
22         }
23         for(int i=0;i<len;i++)
24         {
25             a[i]=s[i]-'0';
26             if(a[i]!=0) p++;
27         }
28         if(p<=1)//非零数字不足两个,不符合 
29         {
30             puts("Uncertain"); continue;
31         }
32         sort(a,a+len);
33         for(int i=0;i<len;i++)//找到最小的非零数字 
34         {
35             if(a[i]!=0)
36             {
37                 p=i; break;
38             }
39         }
40         int j=0;
41         for(int i=0;i<len;i++) 
42         {
43             if(i==p) continue;
44             b[j++]=a[i];
45         }
46         b[0]+=a[p];//相加 
47         b[j]=0;
48         for(int i=0;i<j;i++)//高精度进位 
49         {
50             if(b[i]<10) break;
51             b[i+1]+=b[i]/10;
52             b[i]%=10;
53         }
54         if(b[j]>0) j++;
55         for(int i=j-1;i>=0;i--)
56             printf("%d",b[i]);
57         puts("");
58     }
59 }
我自倾杯,君且随意
原文地址:https://www.cnblogs.com/nicetomeetu/p/5683217.html