question:https://pintia.cn/problem-sets/994805342720868352/problems/994805528788582400
//
第一次写的笨办法 没有拿到全分,主要考虑到数据不大,就这样写了
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int c = a + b;
if (abs(c % 1000 )< 0)
cout << c;
else
{
int d = (c-c % 1000)/1000;
if (abs(d) < 1000)
{
cout << d;
}
else
{
int k = (d - d % 1000) / 1000;
cout << k;
cout << ",";
int m = abs(d - k * 1000);
if (m < 10)
{
cout << "0" << "0" << m;
}
else if (m >= 10 && m < 100)
{
cout << "0" << m;
}
else
{
cout << m;
}
}
cout << ",";
d =abs( c - d * 1000);
if (d < 10)
{
cout << "0"<<"0" << d;
}
else if (d >= 10 && d < 100)
{
cout << "0" << d;
}
else
{
cout << d;
}
}
return 0;
}
//
第二次 精简后的上述算法
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int c = a + b;
if (c < 0)
{
cout << "-";
c = -c;
}
if (c >= 1000000)
{
printf("%d,%03d,%03d", c / 1000000, (c % 1000000) / 1000, c % 1000);
}
else if (c >= 1000)
{
printf("%d,%03d", c / 1000, c % 1000);
}
else
printf("%d", c);
return 0;
}
第三次 普遍解法 将两数字和当作字符串处理
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int c = a + b;
if (c < 0)
{
cout << "-";
c = -c;
}
char s[20];
sprintf(s, "%d", c);
int len = strlen(s);
int start = 0;
int m = len / 3;
if(m==0)
{
cout<<c;
return 0;
}
if (len % 3 == 0)
{
while (m--)
{
cout << s[start] << s[start + 1] << s[start + 2] ;
if (m >= 1)
cout << ",";
start += 3;
}
}
if (len % 3 == 1)
{
cout << s[start] << ",";
start++;
while (m--)
{
cout << s[start] << s[start + 1] << s[start + 2] ;
if (m >= 1)
cout << ",";
start += 3;
}
}
if (len % 3 == 2)
{
cout << s[start] << s[start + 1] << ",";
start += 2;
while (m--)
{
cout << s[start] << s[start + 1] << s[start + 2] ;
if (m >= 1)
cout << ",";
start += 3;
}
}
return 0;
}