题目
大意就是输出一个指定格式的数字,从右往左,每三位数字加一个“,”
难点
我是看的柳婼的博客,大佬一个判定就解决了问题,但我还是想了好久
(i + 1) % 3 == len % 3 && i != len - 1
分析
原判定
if ((i + 1) % 3 == len % 3 && i != len - 1)
其中 i != len - 1很好理解,就是逗号不能是最后一个,如“100”不能是“100,” 这种形式
而 (i + 1) % 3 == len % 3
-
右边 len % 3 代表第几个数字后面应该加“,”
黄色是该字符后面应该加“,” -
左边 (i + 1) % 3代表,3个数字为循环,说明这是第几个数字
i是从0开始的下标,i+1就是第几个数字,因为三个为一组,所以要对三取余
举例
len=8,len%3=2,三个数字为一组,第二个数字后面加“,”
除了最后一个字符
代码
//用to_string方法
#include <iostream>
using namespace std;
int main(){
int a, b, c;
cin >> a >> b;
c = a + b;
if(c < 0){
cout << "-";//输出负号,后面全部按正数来看
c = - c;
}
string s = to_string(c);
int len = s.length();
for(int i=0; i<len; i++){
cout << s[i];
if(((i + 1) % 3 == len % 3) && (i != len - 1))
cout << ",";
}
return 0;
}
//用sprintf
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
int a, b, c;
cin >> a >> b;
c = a + b;
if(c < 0){
cout << "-";
c = - c;
}
char s[100];
sprintf(s, "%d", c);
int len = strlen(s);
for(int i=0; i<len; i++){
cout << s[i];
if(((i + 1) % 3 == len % 3) && (i != len - 1))
cout << ",";
}
return 0;
}