请问大佬这题怎么写?
https://www.dotcpp.com/oj/problem1009.html大佬你好,请问为什么我这个程序会答案错误?
请问如何修改?
你觉得这道题目怎么写,才能更加优化?
#include<stdio.h>
int main()
{
int num,a,c= 0;
int i = 1;
int b ;
scanf("%d",&num);
a = num;
while(a >= 10)
{
a = a / 10;
i++;
}
if(i<=5){
printf("%d\n",i);
a = num;
do
{
b = a % 10 ;
a = a / 10;
c++;
}while(a >= 10);
b = a;
while(c>=0){
printf("%d",b);
printf(" ");
c--;
}
printf("\b\n");
c = 0;
while(c<=i-1){
printf("%d",b);
c++;
}
}
else{
;
}
return 0;
} 本帖最后由 柿子饼同学 于 2023-3-27 20:43 编辑
可以用字符串
你的代码问题在于 依次打印数字时 , 没有考虑到数字是一位数的情况 , 你使用 do-while 语句 , 所以如果是一位数 c 也会自己加一次 , 变成 1
这时 输出的第二行 就会打印两个数字了
改进可以把 do-while 改成 while
用字符串更容易实现翻转 , 长度计算什么的 , 可以用 string.h 的 strlen 函数求字符串长度 , 这里直接把这个数字当作字符串去处理 , 比较方便
#include <stdio.h>
#include <string.h>
char num;
int len;
int main(){
scanf("%s", num);
len = strlen(num);
printf("%d\n", len);// 长度
for(int i = 0; i < len; i++){
printf("%c ", num);
}
printf("\n");
for(int i = len - 1; i >= 0; i--){// 这里注意范围
printf("%c", num);
}
return 0;
} 1、将b数组大小从6更改为5,因为题目要求的整数最多有5位。
2、修改了计算逆序数字的方法。在原代码中,你使用了do-while循环来计算逆序数字,但是,这样的实现可能会导致错误。在新代码中,我将do-while循环替换为while
#include <stdio.h>
int main()
{
int num, a, c = 0;
int i = 1;
int b;
scanf("%d", &num);
a = num;
while (a >= 10)
{
a = a / 10;
i++;
}
if (i <= 5)
{
printf("%d\n", i);
a = num;
while (a > 0)
{
b = a % 10;
a = a / 10;
c++;
}
for (int j = i - 1; j >= 0; j--)
{
printf("%d", b);
if (j != 0)
printf(" ");
}
printf("\n");
for (int j = 0; j < i; j++)
{
printf("%d", b);
}
printf("\n");
}
else
{
;
}
return 0;
}
您好,这道题目的要求是将一个整数的每一位数倒序输出,您的程序的思路基本正确,但是在输出时有一些小问题。
以下是您的程序的修改建议:
1.在第一个while循环中,应该判断a是否大于0,因为如果a=0,那么i的值应该为1,而不是0。
2.在第一个do-while循环中,当a小于10时,应该将最后一位数加入到数组中。
3.在第一个while循环中,当a小于10时,应该将i的值加1。
4.在第二个while循环中,应该从0开始循环,而不是从c开始循环,因为此时c的值为i。
5.在第二个while循环中,应该输出完所有数字后再输出换行符,而不是在最后一个数字后输出退格符。
6.在最后一个else语句中,不需要添加分号。
以下是修改后的程序:
#include<stdio.h>
int main()
{
int num,a,c=0;
int i=0;
int b;
scanf("%!d(MISSING)",&num);
a=num;
while(a>0) //修改1
{
a=a/10;
i++;
}
if(i<=5){
printf("%!d(MISSING)\n",i);
a=num;
do
{
b=a%!;(MISSING)
a=a/10;
c++;
}while(a>0); //修改2
while(c>0){ //修改4
c--;
printf("%!d(MISSING) ",b);
}
printf("\n"); //修改5
c=0;
while(c<i){
printf("%!d(MISSING)",b);
c++;
}
}
else{ //修改6
printf("error\n");
}
return 0;
}
至于如何优化,这道题目的思路比较简单,基本没有优化的余地。不过可以考虑使用递归的方式实现,这样会更加简洁。 歌者文明清理员 发表于 2023-3-27 20:41
您好,这道题目的要求是将一个整数的每一位数倒序输出,您的程序的思路基本正确,但是在输出时有一些小问题 ...
#include<stdio.h>
int main()
{
int num,a,c=0;
int i=0;
int b;
scanf("%d",&num);
a=num;
while(a>0) //修改1
{
a=a/10;
i++;
}
if(i<=5){
printf("%d\n",i);
a=num;
do
{
b=a%10;
a=a/10;
c++;
}while(a>0); //修改2
while(c>0){ //修改4
c--;
printf("%d",b);
}
printf("\b\n"); //修改5
c=0;
while(c<i){
printf("%d",b);
c++;
}
}
else{ //修改6
;
}
return 0;
}
你好,我还是没有修改好,没有通过测试,请问如何修改?
请问你的代码%!d(MISSING)是什么意思?
printf("error\n");这个可能不能通过测试。
页:
[1]