PAT A1023

44次阅读

共计 698 个字符,预计需要花费 2 分钟才能阅读完成。

简单的大数问题,long long 并不能容纳 21 位数字,这是刚开始没有注意到的
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string>
#include<cstring>
#include<vector>
using namespace std;
using std::vector;
char s[21];
int mem[10]={0};
int main(){
vector<int>v;
scanf(“%s”,s);
for(int i=0;i<strlen(s);i++){
mem[s[i]-‘0’]++;
}
// 进行乘 2 大数运算;
int ct=0;
for(int i=strlen(s)-1;i>=0;i–){
int a=(s[i]-‘0’)*2+ct;
ct=a/10;
v.push_back(a%10);
}
if(ct!=0)
v.push_back(ct);
for(int i=v.size()-1;i>=0;i–){
mem[v[i]]–;
}
bool flag=true;
for(int i=0;i<10;i++){
if(mem[i]!=0){
flag=false;
break;
}
}
if(flag){
cout<<“Yes”<<endl;
for(int i=v.size()-1;i>=0;i–){
cout<<v[i];
}
cout<<endl;
}else{
cout<<“No”<<endl;
for(int i=v.size()-1;i>=0;i–){
cout<<v[i];
}
cout<<endl;
}
system(“pause”);
return 0;
}

正文完
 0