c-如何打印字符串编号



问题:如何打印字符串编号?最后的陈述似乎无法执行?问题描述:请注意,数字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) ? "Non" : "Yesn");
if (flag == 1) {
printf("1");
}
printf("%s", num);
return 0;
}

在这种类似的情况下

scanf_s("%s", num, 1);

您向scanf_s()报告缓冲区大小为1,而实际大小为22。

使用正确的缓冲区大小。

scanf_s("%s", num, 22);

scanf_s("%s", num, (unsigned)(sizeof(num) / sizeof(*num)));

最新更新