A1023 Have Fun with Numbers (20分)(大整数四则运算)
一、技术总结
- 关于大整数四则运算一个是结构体的定义,里面除了数组和长度,还应该带有构造函数,进行初始化;
- 还有就是change函数的编写,主要是用来将读入字符串进行转化成结构体,函数中注意点,一个是得定义一个结构体,然后就是将读入的字符串逆序的存入结构体中,方便后续的四则运算;
- add加法函数的关键点,有carry进位变量即可,取余保存当前位,除数保存为进位,如果最后进位不为0,说明应该加一位;
- multi乘法函数的关键点,注意传参一个bign型,一个是整型int,也是定义一个结构体,然后也需要一个carry进位变量,这里是从bign的低位开始乘以传入的整型,然后取余保存当前位,进位为整除,但是最后和add不一样的是,使用while,进行将进位carry一次保存到结构体中。
- sub减法函数的关键点,因为要考虑a的当前位可能比b的当前位要小,因此需要将a当前位向高一位借1,然后高位减减,当前位加10,再进行减法运算;还有可能出现高位很多个0的情况,因此要使用while循环将高位的0去掉,但是要至少保留一位;
- divide除法函数的关键点,需要多传一个引用参数r,用于保存余数,同时因为被除数的每一位于商的长度是一样的所以,先让结构体c的长度与a被除数相同;从高位开始,每次和上一位的余数组合,如果不够除当前位直接商0,否则直接进行整除取商,然后再取余为新余数,也会和减法面临的情况时,高位可能会有很多0,也是至少保留一位即可。
二、参考代码
#include<iostream>
#include<cstring>
using namespace std;
struct bign{
int d[1000];
int len;
bign(){
memset(d, 0, sizeof(d));
len = 0;
}
};
bign change(char str[]){
bign a;
a.len = strlen(str);
for(int i = 0; i < a.len; i++){
a.d[i] = str[a.len - i - 1] - '0';
}
return a;
}
bign add(bign a, bign b){
bign c;
int carry = 0;
for(int i = 0; i < a.len || i < b.len; i++){
int temp = a.d[i] + b.d[i] + carry;
c.d[c.len++] = temp % 10;
carry = temp / 10;
}
if(carry != 0){
c.d[c.len++] = carry;
}
return c;
}
bign multi(bign a, int b){
bign c;
int carry;
for(int i = 0; i < a.len; i++){
int temp = a.d[i] * b + carry;
c.d[c.len++] = temp % 10;
carry = temp / 10;
}
while(carry != 0){
c.d[c.len++] = carry % 10;
carry /= 10;
}
return c;
}
int main(){
char str[1000];
scanf("%s", str);
int num1[10] = {0}, num2[10] = {0};
bign c = add(change(str), change(str));
for(int i = 0; i < strlen(str); i++){
num1[str[i] - '0']++;
num2[c.d[i]]++;
}
int flag = 1;
for(int i = 0; i < 10; i++){
if(num1[i] != num2[i]){
flag = 0;
break;
}
}
if(flag == 1) printf("Yes\n");
else printf("No\n");
for(int i = c.len - 1; i >= 0; i--){
printf("%d", c.d[i]);
}
return 0;
}
作者:睿晞
身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
曾有一个业界大牛说过这样一段话,送给大家:
“华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.