hdu 5718 大数模拟
发布时间:2021-02-27 17:12:51 所属栏目:大数据 来源:网络整理
导读:点击打开链接 #include iostream#include algorithm#include cstdio#include vector#include cstring#include queue using namespace std;const int M = 10010000;int num[10],f[M],index; // num[i] 数字i出现的个数 char data[M]; void Add(int x){int t=0
点击打开链接 #include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <cstring> #include <queue> using namespace std; const int M = 10010000; int num[10],f[M],index; // num[i] 数字i出现的个数 char data[M]; void Add(int x) { int t=0,Index; Index=index;// f[index]+=x; while(index>=1) { if(f[index]>=10) //处理进位 { f[index-1]=f[index-1]+f[index]/10; f[index]=f[index]%10; } index--; } for(int i=0;i<=Index;i++) { if(i==0&&f[i]==0) continue;//是否有前导0 else cout<<f[i]; } printf("n"); } int main() { int t; cin>>t; while(t--) { int count=0,x; memset(num,sizeof(num)); memset(f,sizeof(f)); scanf("%s",data); long long n=strlen(data); for(int i=0;i<n;i++) { num[data[i]-'0']++; if(data[i]-'0'>=1) count++; //记录非0个数 } if(count<2)//rearrange the digits and split the number into <b>two positive integers without leading zeroes { cout<<"Uncertain"<<endl; } else { //分成两部分时 为了使之最大 两部分位数相差越大 两部分和就越大 //所以一部分位数为n-1 另一部分位数为1&&非0 for(int i=1;i<=9;i++) //取最小一位非0 { if(num[i]) { x=i; num[i]--; break; } } index=0; //时间复杂度为 O(TN) for(int i=9;i>=0;i--) //rearrange the digits 数字可以重新排列__就从大到小排 { while(num[i]) { index++; f[index]=i; num[i]--; } } Add(x); } } return 0; } (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐