请大伙儿帮我看看这个小程序有什么问题好吗?很简单的!

dieoffool 2004-10-16 04:36:17
#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int i, j, k, l;
int a;
char buffer[4];

for(i=2; i<10; i++)
for(j=2; j<10; j++)
for(k=2; k<10; k++)
for(l=2; l<10; l++)
{
a = (10*i+j)*(10*k+l);
if( a>1000 )
{
_itoa(a, buffer, 10);
if( buffer[2] == buffer[3] )
{
printf("%d%d*%d%d = %d\n",i,j,k,l,a);

}
}

}

}

/*
这个程序的本意是计算2个2位数相乘,如果结果是4位数,并且
个位数和十位数相等,则输出:ab*cd = xyzz .
但是运行结果不对啊!请大家帮我看看问题在哪儿,好吗?
谢谢了!
*/

...全文
143 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dieoffool 2004-10-16
  • 打赏
  • 举报
回复
谢谢大家了!CSDN上的热心人真多啊!

特别是kobefly(科比) 和 insulator(天外来客),

你们指出了问题所在,是字符串溢出了!

晕啊!_itoa(a, buffer, 10);

想不到buffer溢出竟然会改变a的值......
zhangqiushui 2004-10-16
  • 打赏
  • 举报
回复
if( buffer[2] == buffer[3] )
{
a=atoi(buffer);
printf("%d%d*%d%d = %d\n",i,j,k,l,a);
}
就可以了!
insulator 2004-10-16
  • 打赏
  • 举报
回复
终于找出原因了char buffer[4];==>char buffer[5];
就可以了。

kobefly 2004-10-16
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int i, j, k, l;
int a;
char buffer[5];//楼主你的问题在这里了拉,因为字符串末尾的'\0'溢出了

for(i=1; i<10; i++)
for(j=0; j<10; j++)
for(k=1; k<10; k++)
for(l=0; l<10; l++)
{
a = (10*i+j)*(10*k+l);
if( a>1000 )
{
_itoa(a, buffer, 10);
if( buffer[2] == buffer[3] )
{
printf("%d%d * %d%d = %d\n",i,j,k,l,a);

}
}

}

}
insulator 2004-10-16
  • 打赏
  • 举报
回复
printf("%d%d*%d%d = %d\n",i,j,k,l,a);
===>
printf("%d%d*%d%d = %s\n",i,j,k,l,buffer);
ftkghost 2004-10-16
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int main()
{
int a1,a2,result;
char c[5];
do{
printf("Enter a1,a2 : \n");
scanf("%d,%d",&a1,&a2);
}while(a1>=100||a1<10||a2>=100||a2<10);
result=a1*a2;
while(result>=1000){
if(result%10==(result%100)/10){
a1=result/100;
a2=result%100;
result=a1*a2;
}
else
break;
}
printf("result = %d\n",a1*a2);
getch();
return 0;
}
simonwdjp 2004-10-16
  • 打赏
  • 举报
回复
main()
{
int i,j,v;
for (i=10;i<=99;i++)
{
for (j=10;j<=99;j++)
{
v=i*j;
if (v>=1000 && v<=9999)
{
if(((v%100)/10)==v%10)
{
printf("i=%d,j=%d\n",i,j);
printf("ab*cd = xyzz");
}
}
}
}
}
注:此程序把所有符合条件的记录下来了,如果楼主想要自己输入数的话,就把循环去掉,然后前面加上scanf的格式化输入语句
o1n 2004-10-16
  • 打赏
  • 举报
回复
楼上的,你用VC6.0测试一下就知道了。。。。。
eaglessky 2004-10-16
  • 打赏
  • 举报
回复


上面的大哥,有问题. 应该是: p%100 == p%100/10 才对的.因为是个位与十位相比较.

你写的是:百位与十位的比较.而且,p是否是四位数,应该用 p/1000!=0
hcj2002 2004-10-16
  • 打赏
  • 举报
回复
呵呵
o1n 2004-10-16
  • 打赏
  • 举报
回复
晕呀,那个是p/1000!=0
....
o1n 2004-10-16
  • 打赏
  • 举报
回复
不好意思,刚那个忘记判断结果是否是四位数了.
改正:

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int p=1234;
for(int i=10;i<=99;i++)
for(int j=10;j<=99;j++)
{p=i*j;
if(p%10==p%100/10&&p/100!=0)
{
printf("%d*%d=",i,j);
printf("%d\n",p);
}

}

}
o1n 2004-10-16
  • 打赏
  • 举报
回复
我帮你写了一个.

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int p=1234;
for(int i=10;i<=99;i++)
for(int j=10;j<=99;j++)
{p=i*j;
if(p%10==p%100/10)
{
printf("%d*%d=",i,j);
printf("%d\n",p);
}
}
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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