请问这个代码怎么改正

题目要求是这样的,计算两个数的乘积

img

img


这是我的代码

img


输入100000 100000后结果却是这个样子 想知道我代码里面有哪些问题,求指点!

img

试一下我的这个吧

#include <stdio.h>

int main() {
    int a, b;
    printf("请输入小灯的总行数和总列数(以空格分隔):");
    scanf("%d %d", &a, &b);

    if (a >= 1 && a <= 100000 && b >= 1 && b <= 100000) {
        // 计算小灯的总数
        long long int total = (long long int)a * b;

        printf("小灯的总数为:%lld\n", total);
    } else {
        printf("输入的行数和列数超出允许的范围。\n");
    }

    return 0;
}

超出int的表示范围,溢出了呀
int改成long long
%d改成%lld

把所有的 int 改成 long long,然后把 printf("%d")那里改成 %lld。
大概率是溢出了。

100000 * 100000 的结果超出 int 型数据范围了,溢出了,结果就不正确了。修改如下,供参考:

#include <stdio.h>
int main()
{
    long long a, b;
    do{
        scanf("%lld %lld", &a, &b);
        if (a < 1 || a > 100000 || b < 1 || b > 100000)
            printf("请重新输入两个整数:");
        else
            break;
    } while (1);
    printf("%lld", a * b);
    return 0;
}

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/11200
  • 这篇博客也不错, 你可以看下求100000000!末尾有多少个0
  • 除此之外, 这篇博客: 单片机计时器100000秒以内中的 单片机计时器100000秒以内 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 硬件连接:
    在这里插入图片描述
    代码:

    #include <reg52.h>
    #include <intrins.h>
    #define uchar unsigned char
    #define uint unsigned int
    uchar Count;
    sbit Dot = P0^7;
    uchar code DSY_CODE[]=
    {
     	0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
    };
    
    uchar Digits_of_6DSY[]={0,0,0,0,0,0};
    
    void DelayMS(uint x)
    {
     	uchar i;
    	while(--x)
    	{
    	 	for(i=0;i<120;i++);
    	}
    }
    
    void main()
    {
     	uchar i,j;
    	P0 = 0x00;
    	P3 = 0xff;
    	Count =0;
    	TMOD = 0x01;
    	TH0  = (65535-50000)/256;
    	TL0  = (65535-50000)%256;
    	IE = 0x82;
    	TR0 = 1;
    	while(1)
    	{
    	 	j = 0x7f;
    		for(i=5;i!=-1;i--)
    		{
    		 	j=_crol_(j,1);
    			P3 = j;
    			P0 = DSY_CODE[Digits_of_6DSY[i]];
    			if(i==1) P0 |= 0x80;
    			DelayMS(2);
    		}
    	}
    }
    
    void Time0() interrupt 1
    {
     	uchar i;
    	TH0  = (65535-50000)/256;
    	TL0  = (65535-50000)%256;
    	if(++Count !=2) return;
    	Count = 0;
    	Digits_of_6DSY[0]++;
    	for(i=0;i<=5;i++)
    	{
    	 	if(Digits_of_6DSY[i] == 10)
    		{
    		 	Digits_of_6DSY[i] = 0;
    			if(i != 5) Digits_of_6DSY[i+1]++;
    		}
    		else break;
    	}
    }