指針與數組
看看以下代碼,請預測答案
#include <bits/stdc++.h>
using namespace std;
int x[10]={0,1,2,3,4,5,6,7,8,9};
int main(){cout<<x<<endl;cout<<x+3<<endl;cout<<*x<<endl;cout<<*(x+7)<<endl;cout<<(x+4)[1]<<endl;return 0;
}
解答:
1.x為x[]數組第一個元素的地址
2.x+3為x[]數組第四個元素的地址
3.*x為數組第一個元素
4.*(x+7)為數組第8個元素
5.(x+4)[1]為第5個元素后面一個元素?
x+y問題
函數總覽:
1.converts() 字符串轉為高精度大數
2.add() 將兩個高精度大數相加(類似豎式)
3.print() 輸出一個高精度大數(刪除前導0)
4.main()主函數 調用函數
main()
輸入兩個字符串,用converts轉化為x[]與y[],再用add模擬豎式將兩數相加,print輸出
代碼:
string s1,s2;
cin>>s1>>s2;
converts(x,s1);
converts(y,s2);
add(x,y);
print(x);
相信大家應該看得懂吧
converts()
先給代碼
void converts(int *a,string s){int i,len=s.size();for(i=0;i<len;i++) a[i]=s[len-i-1]-'0';for(;i<SIZE;i++) a[i]=0;
}
注意事項:
1.i定義在循環外,不能for(int i=0;i<len;i++)
2.len-i-1不能忘記減1
3.字符轉整數要-'0'
*第四行代碼有的童鞋看不懂,我解釋下哈,這里因為i定義過了,省略int i=這一部分
add()
發現別的大佬都寫了好長一段代碼,我只需要7行代碼解決add()
上代碼,
void add(int *a,int *b,int len=SIZE){for(int i=0;i<len;i++)if((a[i]+=b[i])>=10){a[i+1]++;a[i]-=10;}
}
思路:遍歷每一位,將兩個數相加,若大于10,則進位
*攪得有的小彭友看不懂第3行,我來解釋下,這里是先a[i]+=b[i],再把結果與10比較
print()
易錯點就刪除前導0吧,其他沒什么了……
void print(int *a){int i;for(i=SIZE-1;i>0;i--) if(a[i]>0) break;for(;i>=0;i--) cout<<a[i];cout<<endl;
}
大家想看一個小視頻嗎,👇
[C++] 高精加法😎🕵??♂?算法詳解?_嗶哩嗶哩_bilibili
x+y+z問題
#include <bits/stdc++.h>
using namespace std;
#define SIZE 550
int x[SIZE],y[SIZE],z[SIZE];
void converts(int *a,string s){int i,len=s.size();for(i=0;i<len;i++) a[i]=s[len-i-1]-'0';for(;i<SIZE;i++) a[i]=0;
}
void add(int *a,int *b,int len=SIZE){for(int i=0;i<len;i++)if((a[i]+=b[i])>=10){a[i+1]++;a[i]-=10;}
}
void print(int *a){int i;for(i=SIZE-1;i>0;i--) if(a[i]>0) break;for(;i>=0;i--) cout<<a[i];cout<<endl;
}
int main(){freopen("plus.in","r",stdin);freopen("plus.out","w",stdout);string s1,s2,s3;cin>>s1>>s2>>s3;converts(x,s1);converts(y,s2);converts(z,s3);add(x,y);add(x,z);print(x);return 0;
}
希望這些對大家有用,三連必回
https://blog.csdn.net/qq_51184727/article/details/129971145 ←看得見嗎