c - 在多行中打印函数的返回
问题描述
我正在学习 C,目前正在做一个练习,我需要将十进制输入转换为二进制,我能够编写一个函数,成功地将输入的十进制转换为二进制,但问题要求每行打印一个数字,例如,“17”的转换为“10001”,但问题希望数字每行打印一个数字,而不是一行。
这是我的代码:
#include <stdio.h>
int convert(int dec){
if (dec > 0) {
return (dec % 2 + 10 * convert(dec / 2));
} else {
return 0;
}
}
int main(int argc, const char * argv[]) {
int dec;
printf("Type a decimal number: ");
scanf("%d", &dec);
printf("%d\n", convert(dec));
return 0;
}
如果我输入30
我的当前输出是
11110
但我希望我的输出是
1
1
1
1
0
我应该怎么办?
解决方案
无需将二进制结果转换为另一个整数,只需打印它们即可。
#include <stdio.h>
void convert(int dec)
{
if (dec > 0) {
convert(dec / 2);
printf("%d\n", dec % 2);
}
}
int main(void)
{
int dec;
printf("Type a decimal number: ");
if (scanf("%d", &dec) == 1) {
convert(dec);
}
}
与您的原始实现相比,这对整数溢出也更安全。
注意:如果输入是一个非常大的数字(例如,考虑一个具有一百万位数字的数字),这可能会导致堆栈溢出。但是如果你要处理这样的数字,你不能int
从一开始就使用,而必须采取不同的方法。
推荐阅读
- swift - 对数组应用 void 函数
- python - 如何在 Python 中测试自反性?
- python - linux custom deploy.sh上的azure python web app不会创建python虚拟环境
- wix - 总内容大小 > 2GB 的 WiX 工具集包
- flutter - Flutter 动画容器
- spring - 没有 SeekToCurrentErrorHandler 的 DeadLetterPublishingRecoverer
- html - 具有固定列和标题的 Flexbox 表
- python - Jenkins 不允许创建 Appium 会话
- string - 评估布尔表达式的设计模式
- c# - Is launchsettings.json in a dotnet core project used in production?