指针与数组
看看以下代码,请预测答案
#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 ←看得见吗