1024 Palindromic Number (25 分)

本题考察大数相加

tips:1.当数据超过long int 时,读入简单办法:用cin以字符串读入,scanf(%s) 貌似读不进来,因为题目给的不是string型
2.全程进行字符串中字符加减,不能转回int,long计算,会溢出。
3. ‘1’-‘0’=1
4. 本题中的多位字符应该是只会在是s[i]这种形式下出现,如果转化成 char类型会自动保留最后一位

代码

#include 
#include 
using namespace std;
string s;
void add(string t) {
    int len = s.length(), cf = 0;
    for(int i = len-1; i>=0; i--) {
        s[i] += t[i] + cf - '0';    // 字符相加计算
        cf=0;							
        if(s[i] > '9') {
            s[i]=s[i] -10;			//把‘多位’字符变1位字符
            cf = 1;
        }
    }
    if(cf) 
	s ='1'+s;				
    }
int main() {
	int i=0,k;
	cin >> s >> k;
   	while(i<k){
   		string t = s;
        reverse(t.begin(), t.end());
        if(s == t)
			break;
        add(t);
    	i++;
	}
    cout << s << endl << i;
    return 0;
}

你可能感兴趣的:(1024 Palindromic Number (25 分))