测试点4没有通过,原因是题目要求N (≤10^100),而我用了long类型。下面讨论一下int,long类型所能表示数字的数量级。
这里是引用
unsigned int 0~4294967295
int 2147483648~2147483647
unsigned long 0~4294967295
long 2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
由此可见long long能表示的最大数字数量级不过10^18.因此本题可以用一个字符数组定义N;
#include
#include
using namespace std;
int main()
{
long n,i=0,sum=0;
cin>>n;
vector v,vec;
if(n==0)
cout<<“zero”;
while(n!=0)
{
v.push_back(n%10);
n/=10;
}
for(i=0;i<v.size();i++)
sum=sum+v[i]; //15
i=0;
while(sum!=0)
{
vec.push_back(sum%10); //51
sum/=10;
}
for(i=vec.size()-1;i>=0;i–)
{
switch(vec[i]){
case 0: cout<<“zero”;break;
case 1: cout<<“one”;break;
case 2: cout<<“two”;break;
case 3: cout<<“three”;break;
case 4: cout<<“four”;break;
case 5: cout<<“five”;break;
case 6: cout<<“six”;break;
case 7: cout<<“seven”;break;
case 8: cout<<“eight”;break;
case 9: cout<<“nine”;break;
default:break;
}
if(i!=0)
cout<<’ ';
}
return 0;
}
关于此代码总结:emplace_back虽然效率较push_back高,但是在某些编译器下显示emplace不存在。push_back()返回的是void,因此不能给变量赋值,通过vector变量调用该函数,可在该变量末尾插入给定参数。