其他分享
首页 > 其他分享> > pat-1136

pat-1136

作者:互联网

#include<bits/stdc++.h>
using namespace std;
bool ishvwf(string a){
	//long long b =stoi(a);
	for(int i=0;i<a.size();i++){
		if(a[i]!=a[a.size()-1-i]){
			return false;
		}
	}
	return true;
}
string add(string a,string b){
	int carry=0,cnt=0;
	char c[1009]={'0'};//1这里一开始大小不够   2清空字符串 
	for(int i=0;i<a.size()||i<b.size();i++){
	int temp=a[a.size()-1-i]-'0'+b[b.size()-1-i]-'0'+carry;//字符转化为数直接-'0'即可  每一个都要减 
    c[cnt++]=temp%10+'0' ;//变成字符 
	carry=temp/10;	 
    }
    if(carry!=0){
    	c[cnt++]=1+'0';//大整数相加处理最后一位大整数相减除去多余0 注意要变回字符 
    	//printf("***%d***",cnt);
	}
    string q=c;
    //debug
    //printf("******%s*****",q.c_str());
    reverse(q.begin(),q.end());
    return q;
}
int main(){
	string a;
	cin>>a;
	if(ishvwf(a)){
		printf("%s is a palindromic number.",a.c_str());
	}
	else{
		int flag=1;
		for(int i=0;i<10;i++){
			//long long _1,_2;
			//_1=stoi(a);
			string p=a;
			reverse(a.begin(),a.end());//无返回值函数 
			//_2=stoi(a);
			//long long c=_1+_2;
			string d=add(p,a);
			//printf("%lld + %lld = %lld\n",_1,_2,c);
			printf("%s + %s = %s\n",p.c_str(),a.c_str(),d.c_str());
			//a=to_string(c);
			a=d;
			if(ishvwf(d)){
				printf("%s is a palindromic number.",d.c_str());
				flag=0;
				break;
			}
		}
		if(flag==1){
			printf("Not found in 10 iterations.");
		}
	}
     return 0;	
}

总结

1.大整数相加1000位,一开始没注意直接转,只错了一个2分的点,看来性价比还是很高的

2.大整数相加时不要忘记处理最后一位进位,相减,相除要去0用while

3.char  d【】数组转string  直接 string a=d就完了我的天哪,然后可以享受string 那些好用的库函数

4.  main函数外定义的函数  里面的变量不能自己初始化,我一开始定义了一个char d【1009】按要求已经够了,但出现了不可名状的错误,我将数组扩大可以解决,后来将他赋值初始化也可以解决,所以要记得初始化,针对字符串即使是赋值操作

英语

 

问题  大整数运算要再总结  写

 

 

 

 

标签:初始化,pat,string,int,1136,long,ishvwf,char
来源: https://blog.csdn.net/m0_45359314/article/details/113659336