PAT 1001. A+B Format (20)(C++)

题目描述

在这里插入图片描述
刚开始拿到这道题不知道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;
}

猜你喜欢

转载自blog.csdn.net/qaqaqa666/article/details/112509942
今日推荐