#include<stdio.h>
int main()
{int i,j,m;
for(i=0;i<4;i++)
{for(m=3;m>i;m--)
printf(" ");
for(j=8;j>7-2i;j--)
printf("*");
printf("\n");}
printf("\n");
return 0;
}
这个有什么问题?
首先解释为什么是负值
因为溢出了
111111*111111=12345654321
超出了int能表示的范围
可能你要问
不是已经%lld了吗
没错
%lld是用于long
long类型的,但只代表输出的时候按照long
long的类型输出,并不能影响后面参数的实际类型
对于整型常数,c语言默认都是int型
除非有特殊标明
接下来说解决方法
很简单
提供两种解决方法
第一种
强制转换
无所不能的强制转换
只要printf("%lld\n",(long
long
)111111*111111);即可
第二个可以不用,因为运算的时候自动会按照高级别类型转换
当然你加上也没关系
第二种方法
后缀
printf("%lld\n",111111ll*111111);
在第一个数字结尾加上两个l
即l
等于告诉系统,这个不是int型
而是long
long型
这样就可以按照long
long
来计算输出了
因为溢出了
111111*111111=12345654321
超出了int能表示的范围
可能你要问
不是已经%lld了吗
没错
%lld是用于long
long类型的,但只代表输出的时候按照long
long的类型输出,并不能影响后面参数的实际类型
对于整型常数,c语言默认都是int型
除非有特殊标明
接下来说解决方法
很简单
提供两种解决方法
第一种
强制转换
无所不能的强制转换
只要printf("%lld\n",(long
long
)111111*111111);即可
第二个可以不用,因为运算的时候自动会按照高级别类型转换
当然你加上也没关系
第二种方法
后缀
printf("%lld\n",111111ll*111111);
在第一个数字结尾加上两个l
即l
等于告诉系统,这个不是int型
而是long
long型
这样就可以按照long
long
来计算输出了
温馨提示:答案为网友推荐,仅供参考
第1个回答 2012-12-16
这不是数学 2i不是表示2*i 要改为2*I 第七行
第2个回答 推荐于2017-05-20
#include<stdio.h>
int main()
{int i,j,m;
for(i=0;i<4;i++)
{for(m=3;m>i;m--)
printf(" ");
for(j=8;j>7-2*i;j--)//数字与变量之间要有乘号*
printf("*");
printf("\n");}
printf("\n");
return 0;
}本回答被网友采纳
int main()
{int i,j,m;
for(i=0;i<4;i++)
{for(m=3;m>i;m--)
printf(" ");
for(j=8;j>7-2*i;j--)//数字与变量之间要有乘号*
printf("*");
printf("\n");}
printf("\n");
return 0;
}本回答被网友采纳
第3个回答 2012-12-16
我试了一下,
for(j=8;j>7-2i;j--)
中错误,其中应该是
2*i
for(j=8;j>7-2i;j--)
中错误,其中应该是
2*i
第4个回答 2012-12-16
符号是中文状态下的!!