pat-1136. A Delayed Palindrome (20) 模拟
生活随笔
收集整理的這篇文章主要介紹了
pat-1136. A Delayed Palindrome (20) 模拟
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本可以java大數就能搞定的問題
當時用java寫完答案明明對了提交總是答案錯誤
很是無語
題意
任給我們一個數
讓我們對這個數進行翻轉相加
如果加和是個回文數 就找到了程序出口
如果不是繼續迭代
輸出過程 如果迭代10次沒有找到就輸出特定信息
分析
就是模擬高精度加法
場上沒想清楚為什么要那么加
兩個數相加只可能比原數多進一位
完全可以用正序和逆序兩個數組里一加
不必管 低位高位 對齊的情況
因為是一個數與自己的逆序相加 所以一定位數相同且從低位加還是從高位加結果相同
如果是不同數的加法或是乘法
我們需要從兩個數的最高位置 向低位運算 因為高位為原數據的低位
所以最后再反向輸出
code
#include<bits/stdc++.h> using namespace std; char a[1010],b[1010]; bool check(char aa[]){int len = strlen(aa);for(int i=0;i<len-1-i;i++){if(aa[i]!=aa[len-1-i])return 0;}return 1; }//回文檢驗 int main() {gets(a);bool f=0;int c=0;while(!check(a)){if( c==10 ){printf("Not found in 10 iterations.");f=1;break;}int lena = strlen(a)-1,tag=0;for(int i=lena;i>=0;i--){b[tag++] = a[i];}//將原數逆序 b[tag] = '\0';printf("%s + %s",a,b);int i,y = 0;for(i=0;i<=lena;i++){//模擬加法int dig = (a[i]-'0')+(b[i]-'0')+y;a[i] = '0'+dig%10;if(dig>9)y=1;else y = 0;}if(y)a[i] = '0'+y,a[++i] = '\0';//余數處理else a[i] = '\0';//行尾結束控制i--;//找回重點for(int j=0;j<i-j;j++){//把順序換回來swap(a[j],a[i-j]);} printf(" = %s\n",a);c++;}if(!f)printf("%s is a palindromic number.",a);return 0; }總結
以上是生活随笔為你收集整理的pat-1136. A Delayed Palindrome (20) 模拟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: div html表格样式,table 表
- 下一篇: 月球探测器中的计算机技术,月球探测器自主