c语言题目二进制加法求指教

问题描述

c语言题目二进制加法求指教
由键盘输入两个二进制正整数(均不超过2的31次方),计算输出它们的和(结果同样以二进制表示)。注:本题以字符串方式读取数据时,
务必使用scanf(""%s"" ....)的方式

输入格式

共两行,一行一个二进制正整数(务必使用scanf(""%s"" ....)的方式,以确保读入的串末尾不会含有空格及其它特殊字符)
输出格式

二进制形式的和
输入样例

1101
10
输出样例

1111

解决方案

1.首先不超过2的31次方,则只需要32位就够了,不需要那么大的数组。
2.xy是int数组,''就是0,怎么能作为x,y的结束
3.你不是一开始就算出来x,y的长度了吗,l1,l2,通过这个长度不就知道相加处理多少位了,
而且哪个长,最后再单独处理哪个不就行了。
或者在一开始,就把长的放在x中,短的放在y中,最后总是处理x。

解决方案二:

 ''的ascii是0,x数组和y数组是整型,如果输入001这种,那么x[i] != ''是false,两者的值是一致的。 把x[10000]={-1} y[10000]={-1}通过是否等于-1进行判断

解决方案三:
最简单可靠的办法就是转换成10进制相加再转回去。

解决方案四:
#include
#include
int main()
{
char a[10000] b[10000];//输入两个字符串
int x[10000] l1 y[10000] l2 i j sum[10000] = {0};
scanf(""%s%s"" &a &b);
l1 = strlen(a);
l2 = strlen(b);
for(j = 0 i = l1-1; i >= 0; i-- j++)
x[j] = a[i] - '0';//逆序存放,将char型变成整型
for(j = 0 i = l2-1; i >= 0; i-- j++)
y[j] = b[i] - '0';//逆序存放,将char型变成整型
for(i = 0; x[i] != '' && y[i] != ''; i++)//相加到其中一个数组完为止
{

if(sum[i] + x[i] + y[i] >= 2)//相加后判断是否要进位,存放在sum数组中
{
sum[i] = (sum[i] + x[i] + y[i]) % 2;
sum[i+1] = 1;
}
else
{
sum[i] = sum[i] + x[i] + y[i];
sum[i+1] = 0;
}
}
if(x[i] != '')//剩下另外一个没加完的数组继续加到sum中
{
for(; x[i] != ''; i++)
{
if(sum[i] + x[i] == 2)
{
sum[i] = 0;
sum[i+1] = 1;
}
else
{
sum[i] = sum[i] + x[i];
sum[i+1] = 0;
}
}
}
else
{
for(; y[i] != ''; i++)
{
if(sum[i] + y[i] == 2)
{
sum[i] = 0;
sum[i+1] = 1;
}
else
{
sum[i] = sum[i] + y[i];
sum[i+1] = 0;
}
}
}
if(!sum[i])//sum[i]是0的话i-1;
i--;
for(; i >= 0; i--)
printf(""%d"" sum[i]);//逆序输出sum
return 0;
}
帮忙看下哪里错了

时间: 2024-08-25 23:44:46

c语言题目二进制加法求指教的相关文章

c语言-C语言题目,跪求大神给个代码,实在不会啊

问题描述 C语言题目,跪求大神给个代码,实在不会啊 描述 大家都知道二进制数只含有0和1,那么问题来了,告诉你一个区间[L,R),L,R都是int范围类的正整数.且L < R,在这个区间里的所有数转化为二进制后所有位数之和最大的数是?(如果有多个输出值最小的) 输入 多组测试数据,每组测试数据仅含有两个整数L,R. 输出 一个整数,表示在以上区间内转化成二进制后所有位数之和最大的数 样例输入 4 7 样例输出 5 解决方案 #include <stdio.h> int cal(int n

求解决-怎么用C语言编写这个程序,求指教

问题描述 怎么用C语言编写这个程序,求指教 本题要求编写程序计算某年某月某日是该年中的第几天. 输入格式: 输入在一行中按照格式"yyyy/mm/dd"(即"年/月/日")给出日期.注意:闰年的判别条件是该年年份能被4整除但不能被100整除.或者能被400整除.闰年的2月有29天. 输出格式: 在一行输出日期是该年中的第几天. 输入样例1: 2009/03/02 输出样例1: 61 输入样例2: 2000/03/02 输出样例2: 62 解决方案 网上一搜有很多,c

编程语言 c语言-新手求指教!用c语言 简单学生成绩统计软件 。万分感谢,编好发到邮箱425572938@.

问题描述 新手求指教!用c语言 简单学生成绩统计软件 .万分感谢,编好发到邮箱425572938@. 实现的任务: (1)每个学生记录中包含学号.姓名和C 语言课设成绩等信息: (2)创建学生记录链表: (3)更新学生记录(插入.排序.删除): (4)能统计各分数段的人数,并以分布图显示: (5)输出学生记录到屏幕. 设计内容: 1. 学生记录应该包括学号.姓名.C 语言课设成绩等信息,是本程序的核心数据结构,定 义如下: typedef struct { char num[11]; /*学号*

求解决-怎么用c语言编这个代码,求指教

问题描述 怎么用c语言编这个代码,求指教 /**给定四种水果,分别是苹果(apple).梨(pear).桔子(orange).葡萄(grape),单价分别对应为3.00元/公斤.2.50元/公斤.4.10元/公斤.10.20元/公斤. 首先在屏幕上显示以下菜单: [1] apple [2] pear [3] orange [4] grape [0] exit 用户可以输入编号1~4查询对应水果的单价.当连续查询次数超过5次时,程序应自动退出查询:不到5次而用户输入0即退出:输入其他编号,显示价格

c语言-C语言输入不会,求指教

问题描述 C语言输入不会,求指教 按如下图形打印杨辉三角,其特点是两个腰上的数都为1,其他位置上的每一个数是它上 一行相邻两个整数之和. 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 . . . Input 包含多组数据.每组数据占一行. 输入n(0 < n <= 20)表示输出杨辉三角的行数. Output 对于每组测试数据,输出n行杨辉三角. 格式要求: 每个数字宽6个字符.请使用 printf("%-6d", a); 每行末尾无空格. Sample In

求解决-请用c语言编写此程序,重点在怎么把None输出,求指教

问题描述 请用c语言编写此程序,重点在怎么把None输出,求指教 /**输出21世纪中截止某个年份以来的所有闰年年份.注意:闰年的判别条件是该年年份能被4整除但不能被100整除.或者能被400整除. 输入格式: 输入在一行中给出21世纪的某个截止年份. 输出格式: 逐行输出满足条件的所有闰年年份,即每个年份占一行.输入若非21世纪的年份则输出"Invalid year!".若不存在任何闰年,则输出"None". 输入样例1: 2048 输出样例1: 2004 200

vc++-C语言的题目,急求!!!

问题描述 C语言的题目,急求!!! 已知有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),金额je(长整型)五部分组成.其中:金额=单价*数量计算得出.(要求把100个销售记录存入结构数组sell中.按产品名称从小到大进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中,最后输出结构数组sell) 解决方案 http://wenku.baidu.com/link?url=VwK62eHFUyC

c语言-新手C语言问题,求指教

问题描述 新手C语言问题,求指教 要求编一个strcpy函数的原型 我大概写了一下 可是跟预期不一样 有没有人愿意指点一下 解决方案 字符串数组先用""初始化一下,然后fuzhi函数最后加一个'',源码在下面,顺便把比较也实现给你好了, #include "stdio.h" #include "iostream" #include using namespace std; void fuzhi(const char* src, char* des

c语言-一道acmC语言题目,求大神解答

问题描述 一道acmC语言题目,求大神解答 描述国庆前每日一弹其中一道题是一个递推公式:f(n)=f(n-1)+f(n-2).现在已知f(1)=1f(2)=1.现在请你设计一个程序计算第n项对520取余的值(%520). 输入多组输入:对于每组输入:只有一行,一个n(0<n≤10^9),表示第n项.输出输出f(n)%520的值.样例输入 解决方案 如果有a = b+c,那么有a%520 = (b%520 + c%520)%520,可以照这样递推上去吧.不会溢出,就是不知道时间会不会超时. 解决方