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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值