vs2017 C++程序实现:二进制数累加器
【摘要】 C++程序实现:二进制数累加器
一、目标
二、方法
三、代码
四、示例
五、总结
一、目标
输入一个任意长度的二进制数,输入累加次数,得到最终二进制数累加的结果。
二、方法
1.累加的原理无非就是0到1再到0的过程
2.累加时注意进位
3.我们用一个长度很长的一维数组存储输入的二进制数,例如:
定义一个字符串变量c定义一个字符常量指针*cc定义一个...
C++程序实现:二进制数累加器
一、目标
输入一个任意长度的二进制数,输入累加次数,得到最终二进制数累加的结果。
二、方法
1.累加的原理无非就是0到1再到0的过程
2.累加时注意进位
3.我们用一个长度很长的一维数组存储输入的二进制数,例如:
- 定义一个字符串变量c
- 定义一个字符常量指针*cc
- 定义一个一维整型数组指针*a
这些变量最终将数据存储在a中,例如:
- c里存储着1001
- 那么我们最终希望a[3]=1,a[2]=0,a[1]=0,a[0]=1
4.累加数据,如果数据每一位都是1,则需要将显示的结果扩展一位
三、代码
-
#include<iostream>
-
#include<string>
-
using namespace std;
-
int main() {
-
string c;
-
cout << "请输入一段二进制位数:" << endl;
-
cin >> c;
-
const char *cc = c.data();//将字符串型数据转化为字符数据
-
int letterCount = strlen(cc);//计算字符串长度
-
cout << "输入字符串长度:" << letterCount << endl;
-
-
int *a = new int[999]; //动态创建一维数组,这里直接定义一个长度为999的二进制数
-
cout << endl;
-
cout << "输出每一位数据:" << endl;
-
for (int i = 0; cc[i] != '\0'; i++) {
-
a[letterCount - 1 - i] = cc[i] - '0';
-
cout << "a[" << letterCount - 1 - i << "]" << a[letterCount - 1 - i] << endl;
-
}
-
cout << endl;
-
cout << "请输入累加的次数:" << endl;
-
int Sum = 0;//定义累加次数
-
int sum = 0;
-
cin >> Sum;
-
-
while (sum < Sum) {
-
int i = 0;
-
int jinwei = 0;//当要进位时,计算二进制数据每一位为1的个数
-
while ((i < letterCount) && (a[i] == 1)) {
-
a[i++] = 0;
-
}
-
if (i < letterCount) {
-
a[i] = 1;
-
}
-
cout << "累加第" << sum + 1 << "次:" << endl;
-
for (int j = 0; j < letterCount; j++) {
-
cout << "a[" << j << "]" << a[j] << endl;
-
if (a[j] == 1) {
-
jinwei++;//查看是否所有位数都是1
-
}
-
if (jinwei == letterCount) {
-
letterCount++;//显示位数加1
-
j++;//跳出循环
-
}
-
}
-
sum++;//累加次数的个数加1
-
}
-
cout << "累加结果为:" << endl;
-
for (int i = letterCount-1; i >= 0; i--) {
-
cout << a[i] << "";
-
}
-
delete[]a;
-
getchar();
-
getchar();
-
return 0;
-
}
四、示例
1.数据1001:
- 输入数据:
- 输入累加次数5:
2.输入数据10111001
- 输入数据
- 输入累加次数11:
五、总结
1.首先是对字符串转字符,字符数组转换为整型数组的用法要熟悉
2.对于动态创建一维数组要熟悉
3.对于什么时候进位,什么时候结束计算要设定好
4.对于C++的理解和应用要熟悉,例如new一个之后要delete
本篇文章到此结束!!
文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。
原文链接:nickhuang1996.blog.csdn.net/article/details/82659837
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)