快速提升代碼能力(9)迴文數

從零起步看算法(第九天 4.14)

//q10  迴文數

1.明天有英語競賽,今天的題做的有的浮躁。本以爲是道水題,做下去發現要學的東西還是很多的

先貼自己的代碼,有幾個問題很麻煩,首先是加過之後的進位,數字轉換爲字符,字符轉換爲數字,最後的輸出格式也很迷,等待以後的編改。

 //q10迴文數
#include<cstdlib>
#include<cstdio>
#include<stdio.h>
#include<string>
#include<cstring>
#include<iostream> 
#include<assert.h>
#include<cmath>
#include<algorithm>
using namespace std;

int de_num(char x[],int num){
	int sum=0;
	for(int i=0;i<num;i++){
	   int k=0;
		while(k<i){
		x[i]=(x[i]+'0')*10;
		k++;
		}
		sum=sum+(x[i]+'0');
	}
	return sum;
}

void fun(char x[],int y){
	int count=y; 
	int len=strlen(x);
	
	if(x[0]==x[len-1]){
		cout<<count<<endl;
		cout<<x<<endl;
		return;
	}
	else
	{
		int x1=de_num(x,len);
		
	    char temple;
		temple=x[0];
		x[0]=x[len-1];
		x[len-1]=temple;
		
		x1+=de_num(x,len);
		cout<<x1<<"--->";
		sprintf(x,"%d",x1);
		count++;
		fun(x,count); 
	}
}

int main(){
	int n;
	char s[256]={0};
	while (cin>>n){
		assert(n>=0);
		sprintf(s,"%d",n);
		fun(s,0);
	}
	return 0;
}
 
 
 

/*
char s[256]={0};

int is_zhuan(int x,string a){
	int y=0;
		for(int i=0;i<a.size();i++){
		if(x!=0){		
		a[i]=(x%10)+'0';
		x=x/10;
	     }
	}
	//轉換 
	char temple;
	temple=a[0];
	a[0]=a[a.size()];
	a[a.size()]=temple;
	
	for(int j=0;j<a.size();j++){

	return y;
	
} 


bool is_hui(int x,string a){
	for(int i=0;i<a.size();i++){
		if(x!=0){		
		a[i]=(x%10)+'0';
		x=x/10;
	}
	}
	if(a[0]==a[a.size()])
	return true;
}

void fun(int x,string a,int count){
	int y;
	y=is_zhuan(x,a);
	
	if(is_hui(x,a)){
	cout<<count<<endl;
	cout<<s;
	cout<<x<<endl;		
	}
	else {
			sprintf(s,%s,"x--->");
			return fun(x+y,a,count++);
	}

}
*/
 

接下來是AC 版

https://blog.csdn.net/jkl46607/article/details/79619721

版本一:

#include <iostream>  
#include <cmath>  
using namespace std;  
   
bool judge(int n)  
{  
    int a[1000];  
    int i;      //位數   
    for(i = 0; n; i++){  
        a[i]=n%10;  
        n/=10;  
    }  
    if(i%2==0){     //  爲偶數  
        int sum=0;  
        int q=i;    //  判斷是不是迴文的   
        int l=i/2;  
        int k=l-1;  //    
        int flag=l;  
        while(l--){  
        if(a[flag++]==a[k--])   
            sum++;        
        }  
        if(sum==q/2)  
        return true;  
        else  
        return false;     
    }     
    if(i%2!=0){//爲奇數   
        int sum=0;  
        int q = i/2-1;  
        int l = i/2;  
        int k = l;  
        int flag = q+2;  
        while(l--){  
            if(a[q--]==a[flag++])  
            sum++;  
        }   
        if(sum==k)  
        return true;  
        else  
        return false;  
    }     
}  
  
int change(int n){  
    int flag = n;  
    int b[1000];  
    int i,m=0;  
    for( i = 0; n; i++){  
        b[i]=n%10;  
        n/=10;  
    }  
    int j =i-1;  
    for(int k=0; k<i; k++,j--){  
        m+=b[k]*pow(10,j);  
    }  
    return flag+m;  
}  
  
int main()  
{  
      
    int n,ans=0;  
    int ac[1000];  
    cin>>n;  
    int flag = n;  
    while(!judge(n)){  
        n=change(n);   
        ans++;  
    }  
    cout<<ans<<endl;  
    if(!judge(flag)){  
        cout<<flag;   
    }  
    while(!judge(flag)){  
        flag=change(flag);   
        cout<<"--->"<<flag;  
    }  
      
    return 0;  
}  

版本2:

需要學習vector的使用,感覺vector很有用。

#include <iostream>  
#include <vector>  
#include <assert.h>  
  
using namespace std;  
  
vector <int> ans;  
int rev(int x) {  
    int res = 0;  
    while(x) {  
        res = res * 10 + x % 10;  
        x /= 10;  
    }  
    return res;  
}  
  
int main() {  
    int n;  
    while(cin>>n) {  
        ans.clear();  
        ans.push_back(n);  
        int temp = rev(n);  
        while(temp != n) {  
            n += temp;  
            ans.push_back(n);  
            temp = rev(n);  
            assert(n > 0);  
        }  
        cout<< ans.size() - 1 << endl;  
        cout<< ans[0];  
        for(int i =1; i < ans.size(); ++i) {  
            cout<< "--->" << ans[i];  
        }  
        cout<<endl;  
    }  
    return 0;  
}  

https://blog.csdn.net/ac_gibson/article/details/43156615

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章