题目链接:
https://pintia.cn/problem-sets/994805342720868352/problems/994805528788582400
我的7分代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
const int maxn=10;
int res[maxn];
int main()
{
string a,b;
cin>>a>>b;
int la=a.size(),lb=b.size();
//a,b均为负数
if(a[0]=='-'&&b[0]=='-'){
string stra=a.substr(1,la-1);
string strb=b.substr(1,lb-1);
int a1=atoi(stra.c_str());
int b1=atoi(strb.c_str());
int sum=a1+b1,num=0;
do{
res[num++]=sum%10;
sum/=10;
}while(sum);
reverse(res,res+num);
printf("-");
if(num<4){
for(int i=0;i<num;i++){
printf("%d",res[i]);
}
}
else{
int camma=num/3;//计算逗号个数
if(num%3==0)
camma=camma-1;
for(int i=0;i<num%3;i++)
printf("%d",res[i]);
camma=camma-1;
int m=num%3,p=m+3;
while(camma>=0&&p<=num){
printf(",");
for(int i=m;i<p;i++){
printf("%d",res[i]);
}
camma-=1;
m=p;
p+=3;
}
}
}
else if((a[0]>='0'&&a[0]<='9')&&(b[0]>='0'&&b[0]<='9')){
int a1=atoi(a.c_str());
int b1=atoi(b.c_str());
int sum=a1+b1,num=0;
do{
res[num++]=sum%10;
sum/=10;
}while(sum);
reverse(res,res+num);
if(num<4){
for(int i=0;i<num;i++){
printf("%d",res[i]);
}
}
else{
bool flag=false;
int camma=num/3;//计算逗号个数
if(num%3==0)
camma=camma-1;
for(int i=0;i<num%3;i++){//判断第一个小数点是否输出
printf("%d",res[i]);
flag=true;
}
if(flag)
camma=camma-1;//小数点数目减1
int m=num%3,p=m+3;
while(camma>=0&&p<=num){
if(flag){
printf(",");
}
for(int i=m;i<p;i++){
printf("%d",res[i]);
}
flag=true;
camma-=1;
m=p;
p+=3;
}
}
}
else{
bool flaga=true,flagb=true;//记录a,b是否为正
string stra,strb;
if(a[0]=='-'){
stra=a.substr(1,la-1);
flaga=false;
}
else
stra=a.substr(0,la);
if(b[0]=='-'){
strb=b.substr(1,lb-1);
flagb=false;
}
else
strb=b.substr(0,lb);
int a1=atoi(stra.c_str());
int b1=atoi(strb.c_str());
int sum,num=0;
if(flaga&&!flagb)
sum=a1-b1;
else if(!flaga&&flagb)
sum=b1-a1;
printf("%d\n",sum);
if(sum==0){
printf("0");
}
else if(sum<0){
printf("-");
sum=abs(sum);
printf("%d\n",sum);
do{
res[num++]=sum%10;
sum/=10;
}while(sum);
reverse(res,res+num);
printf("-");
if(num<4){
for(int i=0;i<num;i++){
printf("%d",res[i]);
}
}
else{
bool flag=false;
int camma=num/3;//计算逗号个数
if(num%3==0)
camma=camma-1;
for(int i=0;i<num%3;i++){//判断第一个小数点是否输出
printf("%d",res[i]);
flag=true;
}
if(flag)
camma=camma-1;//小数点数目减1
int m=num%3,p=m+3;
while(camma>=0&&p<=num){
if(flag){
printf(",");
}
for(int i=m;i<p;i++){
printf("%d",res[i]);
}
flag=true;
camma-=1;
m=p;
p+=3;
}
}
}
else {//大于0
do{
res[num++]=sum%10;
sum/=10;
}while(sum);
reverse(res,res+num);
if(num<4){
for(int i=0;i<num;i++){
printf("%d",res[i]);
}
}
else{
bool flag=false;
int camma=num/3;//计算逗号个数
if(num%3==0)
camma=camma-1;
for(int i=0;i<num%3;i++){//判断第一个小数点是否输出
printf("%d",res[i]);
flag=true;
}
if(flag)
camma=camma-1;//小数点数目减1
int m=num%3,p=m+3;
while(camma>=0&&p<=num){
if(flag){
printf(",");
}
for(int i=m;i<p;i++){
printf("%d",res[i]);
}
flag=true;
camma-=1;
m=p;
p+=3;
}
}
}
}
return 0;
}
分类讨论,模拟写的,不想看为什么不对了(写得太复杂),
一个老毛病:能用整形算的数,不用拿字符串再转换,来算。
19分代码(测试点4一直出错):
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
char res[10];
int main(){
int a,b;
scanf("%d%d",&a,&b);
int c=a+b;
if(c==0)
printf("0");
else if(c<0){
printf("-");
c=abs(c);
}
sprintf(res,"%d",c);
int num=strlen(res);
int m=0;
if(num%3==1){
printf("%c",res[0]);
m=1;
}
else if(num%3==2){
printf("%c%c",res[0],res[1]);
m=2;
}
else if(num%3==0){
//写成else(num%3==0)....错误找了半天....
printf("%c%c%c",res[0],res[1],res[2]);
m=3;
}
for(int i=m;i<num;i+=3){
printf(",%c%c%c",res[i],res[i+1],res[i+2]);
}
return 0;
}
20分代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
int a, b, sum, c;
sum = 0;
scanf("%d %d", &a,&b);
sum = a + b;
if(sum < 1000 && sum > -1000)
printf("%d\n",sum);
else if(sum < 1000000 && sum > -1000000)
printf("%d,%03d\n", sum/1000, abs(sum % 1000));
else {
c = sum % 1000000;
printf("%d,%03d,%03d\n", sum / 1000000, abs(c/1000), abs(c%1000));
}
return 0;
}
殊途同归:
#include<iostream>
#include<cstdio>
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;
}