淘宝首页网站怎么做手机短视频制作软件app
news/
2025/9/30 15:49:20/
文章来源:
淘宝首页网站怎么做,手机短视频制作软件app,做网站找个人,上海培训机构整顿目录
一#xff0c;题目
二#xff0c;思路
三#xff0c;代码 一#xff0c;题目
输入 共2行#xff0c;第1行是被减数a#xff0c;第2行是减数b(a b)。每个大整数不超过200位#xff0c;不会有多余的前导零。
输出 一行#xff0c;即所求的差。
样例输入1…目录
一题目
二思路
三代码 一题目
输入 共2行第1行是被减数a第2行是减数b(a b)。每个大整数不超过200位不会有多余的前导零。
输出 一行即所求的差。
样例输入1
9999999999999999999999999999999999999 9999999999999
样例输出1
9999999999999999999999990000000000000
二思路
这道题和之前的《c习题26-大整数加法》思路类似不同点就在于
加法涉及到的是进位字符串a的元素个数可能比字符串 b少在相加的过程中需要考虑到存储结果的字符数组 r 必须 要多一位;减法是借位题目有注明字符串a的元素个数比字符串b多既a比b大相减出来的结果一定是正数并且存储结果的字符数组 r 的长度和字符数组a的长度一样;在做减法运算的时候会出现很多个前导0加法中就没有前导0如果存储结果的字符数组 r 最左边出现了‘0’那么肯定有进位1加上去之后就会变成“10”。
如下分析减法 9999-99981 1两个数都反转 9999 8999 2两数相减 1000 3将存储输出结果的字符数组 r 反转 0001 4消除最后一个元素 1 的前导0 因为前导0的个数是未知的需要使用到while循环统计出前导0的个数循环次数la-2次不需要判断字符数组的最后一个元素即使最后一个元素是0也需要保留下来作为结果输出一旦遇到字符0就让统计前导0个数的变量 k 自增。 5在输出字符数组的的时候不需要前导0因此需要从数组的 r 的 k 个 元素之后开始输出结果。
上面步骤所对应的简单代码描述
反转字符数组可以使用reverse函数 reverse(字符数组名字符数组名对应字符数组的元素个数)例如反转字符数组 char a[201]; →reverse(a,astrlen(a));通过题目描述知道字符串a的元素个数肯定比字符串b多因此在遍历字符数组的时候遍历的次数可以直接设置为字符数组a的元素个数既 int lastrlen(a); 如果是加法的话还得使用max函数找到两个字符串中最多的元素个数既int mmax(a,b); 同时遍历两个字符串从第一个元素下标0 开始 依次取出两个字符串中对应的元素 · 因为字符串a的元素个数最多遍历的次数也是a的元素个数不存在在遍历数组的时候循环变量 i 大于a的元素个数的情况所以字符数组a中的数字d1可以使用直接取到 int d1a[i] -0; · 但字符数组b在取值的时候就需要判断如果循环变量 i 小于 b的元素个数 lbstrlen(b)那么也可以直接取到字符数组b中的数字d2否则将未初始化的元素看成数字0int d2ilb?b[i]-0:0; · 接着将d1和d2相减赋值给局部变量int cd1-d2前面提到减法运算会有借位在处理借位时可以给一个全局变量 int j0;因此c的值还得需要再减去 j 当结果c小于0为负数时需要将c的值加上10由负数变换成正数并且用于借位的 j 变量要赋值为1表示发生了借位。否则用于借位的变量 j 还是 默认为 0 更新j0 · 在一轮运算结束之后需要将 c 存入 存储输出结果的字符数组 r 中因为 r 是 字符型数组变量c是整型变量将 c 的结果再加上字符 0就可以实现将整型数据转换成字符型数据。使用reverse函数反转存储输出结果的字符数组 r使用while循环并定义一个循环变量int k0 。循环条件为 k小于字符数组 a 的元素个数 la-1既k最大只能取到下标为la-2的元素既倒数第三个元素 以及 从第一个元素开始遍历输出结果数组时如果有前导‘0’出现那么就让 k 自增统计前导0的个数。给字符数组的末尾加上结束符\0之后就可以使用coutrk;输出结果。
三代码
#include bits/stdc.h
using namespace std;
int main() {char a[201], b[201], r[201];cin a b;reverse(a, a strlen(a));reverse(b, b strlen(b));int la strlen(a), lb strlen(b), j 0, k 0;for (int i 0; i la; i) {int d1 a[i] - 0;int d2 (i lb) ? (b[i] - 0) : 0;int c d1 - d2 - j;if (c 0) {c 10;j 1; } else {j 0;}r[i] c 0;}reverse(r, r la);while (k la - 1 r[k] 0) {k;}r[la] \0; cout (r k) endl;return 0;
}
也可以使用sting来创建字符串也是类似的思路只是所使用得到的函数不一样而已代码如下
#include bits/stdc.h
using namespace std;
int main() {string a,b,r;cin a b;int la a.size(), lb b.size(),j 0;for (int i 0; i la; i) {int d1 a[la - 1 - i] - 0;int d2 (i lb) ? (b[lb - 1 - i] - 0) : 0;int c d1 - d2 - j;if (c 0) {c 10;j 1;} else {j 0;}r.push_back(c 0);}while (r.size() 1 r.back() 0) {r.pop_back();}reverse(r.begin(), r.end());cout r;return 0;
} 有问题请在评论区留言或者是私信我回复时间不超过一天。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923024.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!