题源:acwing
1473. A + B 格式
计算 a+b 并以标准格式输出总和----也就是说,从最低位开始每隔三位数加进一个逗号(千位分隔符),如果结果少于四位则不需添加。
输入格式
共一行,包含两个整数 a 和 b。
输出格式
共一行,以标准格式输出 a+b 的和。
数据范围 −106≤a,b≤106
输入样例:
-1000000 9
输出样例:
-999,991
#include <iostream>
using namespace std;
int main(){
int a, b;
cin>>a>>b;
int c = a + b;
string num = to_string(c);
string res;
for(int i = num.size() - 1, j=0; i>=0; i-- ){
res = num[i] +res;
j++;
if( j % 3 == 0 && i && num[i-1] != '-' )
res = ',' + res;
}
cout<< res <<endl;
return 0;
}
to_string()函数:把数字变为字符串。
字符数字 - ‘0’ :把字符变成数字。
循环条件是:if( j % 3 == 0 && i && num[i-1] != ‘-’ )
每一次都是先把原字符串的当前位放进答案,然后(对于原字符串的这一位) 判断在当前答案的下一位上是否该放’,’
三种情况:
-
j 是count答案的位数,每有3位,得加个′,′,即j % 3 == 0
-
如果和为负数,就不能在本来是‘-’的位置(也是num[0]的位置)写′,′,即原字符串的下一位也就是num[i - 1] != ’ ,’
-
i = 0 时整个字符串刚好结束,如果刚好是3倍,就不用再加′,′了(比如 -48 + 2)
题解参考:小张同学
1477. 拼写正确
给定一个非负整数 N,你的任务是计算 N 的所有数字的总和,并以英语输出总和的每个数字。
输入格式
共一行,包含一个整数 N。
输出格式
共一行,用英语输出总和的每个数字,单词之间用空格隔开。
数据范围
0≤N≤10100
输入样例: 12345
输出样例: one five
#include <iostream>
using namespace std;
int main(