大神们,求教一个问题

moyac 2016-05-10 06:13:24
嗯,我想知道,我下面的这个代码的话,具体是错在了哪个地方呢?因为,运行的时候,输入了数据之后,就不动了呢,大神帮忙看一下咧
int main()
{
int input;
int x, n;
int num;
int sum;

n = 0;
sum = 0;
scanf("%d", &input);
while ( input > 0 ) {
x = input % 10;//整数的最后一位
n++;//第n位
if ( x%2==0 && n%2==0) {
num = 1;
} else if ( x%2!=0 && x%2!=0) {
num = 1;
} else {
num = 0;
}
sum = sum + num * 2;
input = input - x;
}

printf("%d", sum);

return 0;
}


这个的题目是:
题目内容:
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。

这里的计算可以用下面的表格来表示:



按照二进制位值将1的位的位值加起来就得到了结果13。

你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。

提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。

输入格式:
一个非负整数,整数的范围是[0,100000]。

输出格式:
一个整数,表示计算结果。

输入样例:
342315

输出样例:
13

我主要是想知道,我的代码具体是出现错误,在哪里
...全文
142 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouxiaofeng1021 2016-05-11
  • 打赏
  • 举报
回复
引用 5 楼 moyac 的回复:
[quote=引用 4 楼 zhouxiaofeng1021 的回复:] F9 设置断点 F5 运行 调试 查看堆栈 查看 变量值 你就学会了 自己找问题了 程序猿必备 调试技能
现在还不是很会这个呀,大神,求指教一下[/quote] VS2008的话,就是你点击某一行,按F9 就可以设置断点 F5进入调试 最好DEBUG模式
moyac 2016-05-10
  • 打赏
  • 举报
回复
我已经自己解答出来啦,原来是自己在input = (input - x) / 10;,这一步上面,没有处理好,还有就是忽略了,这个进制之间的转换
moyac 2016-05-10
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{
	int input;
	int x, n;
	int num;
	int sum;
	int step;
	
	n = 0;
	sum = 0;
	step = 1;
	scanf("%d", &input);
	while ( input > 0 ) {
		x = input % 10;//整数的最后一位
		n++;//第n位
		if ( x%2==0 && n%2==0) {
			num = 1;
		} else if ( x%2!=0 && n%2!=0) {
			num = 1;
		} else {
			num = 0;
		}
		sum = sum + num * step;
		step *= 2;
		input = (input - x) / 10;
	}
	
	printf("%d", sum);
	
	return 0;
}
moyac 2016-05-10
  • 打赏
  • 举报
回复
引用 4 楼 zhouxiaofeng1021 的回复:
F9 设置断点 F5 运行 调试 查看堆栈 查看 变量值 你就学会了 自己找问题了 程序猿必备 调试技能
现在还不是很会这个呀,大神,求指教一下
zhouxiaofeng1021 2016-05-10
  • 打赏
  • 举报
回复
F9 设置断点 F5 运行 调试 查看堆栈 查看 变量值 你就学会了 自己找问题了 程序猿必备 调试技能
moyac 2016-05-10
  • 打赏
  • 举报
回复
嗯,求大神,解答一下,到底是为谁呢?比较困惑这一段代码呢
moyac 2016-05-10
  • 打赏
  • 举报
回复
引用 1 楼 baidu_34875474 的回复:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 int main() { int input; int x, n; int num; int sum; n = 0; sum = 0; scanf("%d", &input); while ( input > 0 ) { x = input % 10;//整数的最后一位 n++;//第n位 if ( x%2==0 && n%2==0) { num = 1; } else if ( x%2!=0 && x%2!=0) { num = 1; } else { num = 0; } sum = sum + num * 2; input = input - x; } printf("%d", sum); return 0; }
嗯,你的意思是?不是很理解呢?大神
baidu_34875474 2016-05-10
  • 打赏
  • 举报
回复
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 int main() { int input; int x, n; int num; int sum; n = 0; sum = 0; scanf("%d", &input); while ( input > 0 ) { x = input % 10;//整数的最后一位 n++;//第n位 if ( x%2==0 && n%2==0) { num = 1; } else if ( x%2!=0 && x%2!=0) { num = 1; } else { num = 0; } sum = sum + num * 2; input = input - x; } printf("%d", sum); return 0; }

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧