c - 如何打印字符串 num?
问题描述
问题:如何打印字符串 num?似乎最终语句无法执行?问题描述:请注意,数字 123456789 是一个 9 位数字,完全由 1 到 9 的数字组成,没有重复。将其加倍,我们将获得 246913578,它恰好是另一个 9 位数字,恰好包含从 1 到 9 的数字,只是排列不同。如果我们再次将其翻倍,请检查结果!现在你应该检查这个属性是否有更多的数字。也就是说,将给定数字加倍为 k 位,您要判断结果数字是否仅由原始数字中的数字排列组成。
/* Have Fun with Numbers */
#include <stdio.h>
#include <string.h>
int book[10] = { 0 };
int main(int argc, char* argv[])
{
char num[22];
int temp = 0;
scanf_s("%s", num, 1);
// Length of numbers
int len = strlen(num);
int flag = 0;
for (int i = len - 1; i >= 0; --i) {
// Convert an ASCII value of a digit into an integer
temp = num[i] - '0';
// Add 1 each time read a digit
++book[temp];
temp = temp * 2 + flag;
flag = 0;
if (temp >= 10) {
temp -= 10;
flag = 1;
}
// Convert an integer into an ASCII value of a digit
num[i] = (temp + '0');
// Subtract 1 each time generate a digit
--book[temp];
}
int flag1 = 0;
for (int i = 0; i < 10; ++i) {
if (book[i] != 0) {
flag1 = 1;
}
}
printf("%s", (flag == 1 || flag1 == 1) ? "No\n" : "Yes\n");
if (flag == 1) {
printf("1");
}
printf("%s", num);
return 0;
}
解决方案
在这个像
scanf_s("%s", num, 1);
您将缓冲区大小报告为 1,scanf_s()
而实际大小为 22。
使用正确的缓冲区大小。
scanf_s("%s", num, 22);
或者
scanf_s("%s", num, (unsigned)(sizeof(num) / sizeof(*num)));
推荐阅读
- django-celery - Celery 任务在本地运行时在正常关闭时重新排队到代理,但尽管配置相同但在 kubernetes 中丢失
- azure - AKS 节点池规模集容错域计数始终为 1
- python - 如何根据包含图像链接的变量渲染图像?
- wordpress - WordPress:为什么自定义字段复选框没有出现在模板中,而只有它的标签和说明
- javascript - Javascript 11 个折扣订单中的一个
- r - 将特定列替换为 Y 为 1 和 N 为 0
- python - 在 Python 中编写一个函数来拆分文件夹中的数据(我写了它但产生了不好的结果)
- javascript - 在 JS 中,如何访问任何给定对象的给定属性路径?
- python - 精度和 F 分数定义不明确,在没有预测样本的标签中设置为 0.0
- flutter - 在 Flutter 中将任意字符串作为 Dart 代码运行