a-2b
 

描述

输入两个高精度数a和b,求a-2b的值。

输入

输入两行,第一行是被减数a,第二行是减数b(a>2b并且a,2b的位数不同且不存在借位,且b+b不存在进位)。

输出

一行,即所求的差。

输入样例 1

888888888888888888888888
44444444

输出样例 1

888888888888888800000000

#include <iostream>
#include <cstring>
using namespace std;
int main() {
char a1[256] = {},b1[256] = {};
int a[256] = {},b[256] = {},c[256] = {},lena,lenb,i;
int lenc = 0;
cin >> a1 >> b1;
lena = strlen(a1);
lenb = strlen(b1);
for (i = 0; i <= lena-1; i ++) {
a[lena-i-1] = a1[i] - 48;
}
for (i = 0; i <= lenb-1; i ++) {
b[lenb-i-1] = b1[i] - 48;
}
while (lenc<lena||lenc<lenb) {
c[lenc] = a[lenc] - b[lenc] - b[lenc];
lenc ++;
}
while ((c[lenc-1] == 0)&&(lenc > 1)) {
lenc--;
}
for (i = lenc-1;i >= 0;i --) {
cout << c[i];
}
return 0;
}
"#include <iostream>": "包含C++标准输入输出流库。",
"#include <cstring>": "包含C++字符串操作库。",
"using namespace std;": "使用C++标准命名空间,这样就可以直接使用标准库中的名字,例如cin, cout等。",
"int main() {": "程序的主函数开始。",
"char a1[256] = {},b1[256] = {};": "声明两个字符数组a1和b1,长度均为256,并初始化为空字符串。",
"int a[256] = {},b[256] = {},c[256] = {},lena,lenb,i;": "声明三个整数数组a, b和c,长度均为256,并初始化为0。同时声明了三个整数变量lena, lenb和i。",
"int lenc = 0;": "声明一个整数变量lenc并初始化为0,用于记录数组c的长度。",
"cin >> a1 >> b1;": "从标准输入读取两个字符串,分别赋值给a1和b1。",
"lena = strlen(a1);": "计算字符串a1的长度并赋值给lena。",
"lenb = strlen(b1);": "计算字符串b1的长度并赋值给lenb。",
"for (i = 0; i <= lena-1; i ++) { a[lena-i-1] = a1[i] - 48; }": "将字符串a1的每个字符(按逆序)转换为对应的数字,并存储在数组a中。",
"for (i = 0; i <= lenb-1; i ++) { b[lenb-i-1] = b1[i] - 48; }": "将字符串b1的每个字符(按逆序)转换为对应的数字,并存储在数组b中。",
"while (lenc<lena||lenc<lenb) { c[lenc] = a[lenc] - b[lenc] - b[lenc]; lenc ++; }": "执行大数减法,将数组a和b对应位置的数字相减,并将结果存储在数组c中。当lenc小于a或b的长度时继续执行。",
"while ((c[lenc-1] == 0)&&(lenc > 1)) { lenc--; }": "去掉结果数组c前导的0,如果最后一位是0并且lenc大于1,则将lenc减1。",
"for (i = lenc-1;i >= 0;i --) { cout << c[i]; }": "逆序输出数组c的内容,即输出大数减法的结果。",
"return 0;": "主函数返回0,表示程序正常结束。",
"}": "主函数结束。"
#include <iostream>
#include <string>
using namespace std; int main() {
string a, b;
cin >> a >> b;
int len_a = a.length(), len_b = b.length();
int diff = len_a - len_b; // a-2b的位数差
string ans = a.substr(0, diff); // 截取a的前diff位
for (int i = 0; i < len_b; i++) {
int sub = (a[i+diff] - '0') - 2 * (b[i] - '0'); // 计算每一位的差
if (sub < 0) { // 需要借位
sub += 10;
ans[i]--; // 借位操作
}
ans += to_string(sub); // 拼接差值
}
cout << ans << endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main(){
char a1[1001]={},a2[1001]={};
int b1[1001]={},b2[1001]={},b3[1001]={};
cin>>a1>>a2;
int len1=strlen(a1);
int len2=strlen(a2);
if(len2>len1 || (len2==len1) && strcmp(a1,a2)<0){
swap(a1,a2);
swap(len1,len2);
cout<<"-";
}
for(int i=0;i<len1;i++){
b1[len1-1-i]=a1[i]-'0';
}
for(int i=0;i<len2;i++){
b2[len2-1-i]=a2[i]-'0';
}
int lenc=len1;
for(int i=0;i<lenc;i++){
if(b1[i]<b2[i]){
b1[i]+=10;
b1[i+1]--;
} b3[i]=b1[i]-b2[i];
}
while(b3[lenc-1]==0){
lenc--;
if(lenc==1){
break;
}
}
for(int i=lenc-1;i>=0;i--){
cout<< b3[i] ;
}
return 0;
}

a-2b的更多相关文章

  1. <开心一笑> 码农 黑客和2B程序员之间的区别

    笔记本电脑 码农: 黑客: 2B程序员: 求2的32次方: 码农: System.out.println(Math.pow(2, 32)); 黑客: System.out.println(1L< ...

  2. RPi 2B USB 远程桌面

    /******************************************************************** * RPi 2B USB 远程桌面 * 说明: * 用作废的 ...

  3. Android telnet RPi 2B

    /************************************************************************* * Android telnet RPi 2B * ...

  4. RPi 2B Android telnet ssh

    /*********************************************************************** * RPi 2B Android telnet ssh ...

  5. 【树莓派2B倒腾日志】之安装系统及配置

    15号树莓派到手到现在,折腾了也有一小周,自己摸索着,装了系统,登上SSH,更新了源,连了VNC,换上wifi,亮了小灯.再到今天捣鼓了下数码管,回头想想,该写个日志记录一下这一周的所得,自己总结也方 ...

  6. RPi 2B Documentation

    /********************************************************************** * RPi 2B Documentation * 声明: ...

  7. RPi 2B Raspbian SD卡内部架构

    /***************************************************************************** * RPi 2B Raspbian SD卡 ...

  8. RPi 2B Raspbian system install

    /***************************************************************************** * RPi 2B Raspbian系统安装 ...

  9. RPi 2B SD read-only filesytem

    /**************************************************************************** * RPi 2B SD read-only ...

  10. RPi 2B 中文语言包

    /************************************************************************* * RPi 2B 中文语言包 * 声明: * 本文 ...

随机推荐

  1. 从n个不同元素中有放回的取出r个且不计顺序,有多少种不同的取法?

    从n个不同元素中有放回的取出r个且不计顺序,有多少种不同的取法? 答案是:\(C_{n+r-1}^r\) 解析 因为是有放回地取出,所以同一个元素可能会被取多次,并且取出的元素是不计顺序的,那么如果我 ...

  2. 【C++ Primer】第二章(2 ~ 6节)

    变量 变量提供一个具名的.可供程序操作的存储空间. C++中变量和对象一般可以互换使用. 变量定义(define) 定义形式:类型说明符(type specifier) + 一个或多个变量名组成的列表 ...

  3. [ARM 汇编]高级部分—ARM汇编编程实战—3.3.2 嵌入式开发环境搭建

    搭建一个嵌入式开发环境主要包括以下几个部分: 安装交叉编译器 配置集成开发环境(IDE) 安装调试工具 下载和烧录程序 接下来,我们将详细介绍每个部分,并提供相应的实例. 安装交叉编译器 交叉编译器是 ...

  4. Kubernetes应用编排与管理 —— Deployment升级策略

    1.Deployment概述 Deployment 是 Kubernetes 控制器的一种高级别实现,它构建于 ReplicaSet 控制器之上,它可用于为 Pod 和 ReplicaSet 资源提供 ...

  5. IOS开发--UILabel的基本使用

    UILabel是iOS中用于显示静态文本的控件. 它的主要功能是:1. 显示一行或多行文本 UILabel可以用来显示单行或多行文本内容.通过设置numberOfLines属性可以控制文本显示的行数. ...

  6. 解读 --- yield 关键字

    引言 yield关键字是 C# 中的一种语言特性,用于在枚举器中简化迭代器的实现.它使得开发人员可以通过定义自己的迭代器来简化代码,而不必手动实现 IEnumerable 和 IEnumerator ...

  7. 我真的,AI框架的编程范式怎么理解?

    我给领导汇报AI框架用函数式编程好,没讲明白,说函数式就是写函数那样方便,都被领导吊飞了,啥玩意,写啥不是写函数,狗屁不通! 网上搜说用tensorflow那就是用声明式编程,用pytorch就是命令 ...

  8. asp.net core之配置

    简介 配置在asp.net core中可以说是我们必不可少一部分.ASP.NET Core 中的应用程序配置是使用一个或多个配置提供程序执行的. 配置提供程序使用各种配置源从键值对读取配置数据,普通最 ...

  9. 2021-7-29 MySql进阶

    Alter的使用: 列的增加和删减 alter table users add user_name VARCHAR(100);#添加一列在末尾 SELECT * from users; alter t ...

  10. Node: 将时间戳转换成日期并分组

    // 对时间戳按日期进行分组 let moment = require('moment') let timestamp_array = [ 1645059333000, 1613523333000, ...