题目描述
刚开始拿到这道题不知道C++也有数字转字符串的函数,自己手写了一个tostring,但转换后的字符串是倒置的,在输出时对于某些情况考虑不全面,导致没有全对,改了几次才改全对,代码繁琐冗长。
#include<iostream>
#include<string>
using namespace std;
string tostring(int num){
if(num == 0 )
return "0";
string result="";
while(num!=0){
result+ =(char)(num%10+'0');
num/=10;
}
return result;
}
int main(){
int a,b;
while(cin>>a>>b){
int sum = a+b;
if(sum<0)
{
cout<<"-";
sum= -sum;
}
string result= tostring(sum);
int num =0;
int tem = result.length()%3;
int i;
for(i = result.length()-1;tem>0;tem --,i--){
cout<<result[i];
if( tem == 1&&result.length()>3)
cout<<",";
}
for(;i>=0;i--){
cout<<result[i];
num++;
if(num == 3){
if(i==0)
continue;
cout<<",";
num=0;
}
}
cout<<endl;
}
}
接着网上查看了其他人的代码发现只需要几行就能解决(自己还是太菜了)
解法1
主要运用字符串处理。to_string将数字转换为字符串。另外为了避免当数字的位数恰好为三的倍数,i=0时输出‘,’,所以在判断条件上加了i!=0;
#include <iostream>
#include <string>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
if(a+b<0)
cout<<'-';
string s=to_string(abs(a+b));
int d=(s.length())%3;
for(int i=0;i<s.length();i++){
if(i!=0&&i%3==d)
cout<<',';
cout<<s[i];
}
}
解法2
假设得到的char数组或者string长度为len,求出len%3的值,如果值不为0,假设为2,就先将前面这len%3位输出,剩下的就按照输出一个",“再输出3位数字的形式输出;如果值为0,就先输出前面的三位,剩下的依然按照输出一个”,"再输出3位数字的形式输出即可。
#include<bits/stdc++.h>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
if(a+b<0)
cout<<"-";
string s=to_string(abs(a+b));
int i=s.size()%3==0?3:s.size()%3;
cout<<s.substr(0,i);
for(;i<s.size();i+=3)
cout<<","<<s.substr(i,3);
return 0;
}