Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将两个大于255的数字相乘_C_Numbers - Fatal编程技术网

C 将两个大于255的数字相乘

C 将两个大于255的数字相乘,c,numbers,C,Numbers,我需要一个问题,我使用PIC模拟器通过串口输入2个数字。首先我发送字节,例如5,然后发送2,在第三步我发送字符,例如*,结果是5*2=10。在我发送大于255的号码之前,一切正常。它说输入错误,我知道我只能发送255个字节。但我如何才能导入更大的数字。应该在代码中更改哪些内容以适用于更大的数字。一些想法???????非常感谢 //================= konfigure LCD display // port for data PORTB sbit LCD_RS a

我需要一个问题,我使用PIC模拟器通过串口输入2个数字。首先我发送字节,例如5,然后发送2,在第三步我发送字符,例如*,结果是5*2=10。在我发送大于255的号码之前,一切正常。它说输入错误,我知道我只能发送255个字节。但我如何才能导入更大的数字。应该在代码中更改哪些内容以适用于更大的数字。一些想法???????非常感谢

//================= konfigure LCD display
    // port for data PORTB
    sbit LCD_RS at RB4_bit;
    sbit LCD_EN at RB5_bit;
    sbit LCD_D4 at RB0_bit;
    sbit LCD_D5 at RB1_bit;
    sbit LCD_D6 at RB2_bit;
    sbit LCD_D7 at RB3_bit;

    sbit LCD_RS_Direction at TRISB4_bit;
    sbit LCD_EN_Direction at TRISB5_bit;
    sbit LCD_D4_Direction at TRISB0_bit;
    sbit LCD_D5_Direction at TRISB1_bit;
    sbit LCD_D6_Direction at TRISB2_bit;
    sbit LCD_D7_Direction at TRISB3_bit;
    //=========================================================

    //===========variables
    char operation;
    int nbr1=0,nbr2=0,result=0,rest=0;
    char txt[16],br[7];
    //=========================================================

    //======== delete empty spaces
    void empty_spaces(char array[]){
     int j=0,i=0,n=0;
     n=strlen(array);
     while(i<n){
        if(array[i]==' '){
            j=i;
            while(j<n){
                 array[j]=array[j+1];
                 ++j;
            }
            --n;
        }else
             ++i;
     }
     if(n>15)
             n=15;
    array[n]='\0';
    }
    //=========================================================

    //========function back int from the imported char

    int back_char(char operation ){
        if(operation=='+')
             return 1;
        if(operation=='-')
             return 2;
        if(operation=='*')
             return 3;
        if(operation=='/')
             return 4;
        if(operation=='%')
             return 5;
        return 0;
    }
    //=========================================================

    //============= init lcd display and serial port
    void inicijalizacija(){
      PORTB = 0xFF;
      TRISB = 0x00;
      ANSEL  = 0x00;
      ANSELH = 0x00;
      C1ON_bit = 0;
      C2ON_bit = 0;
      UART1_Init(9600);
      Delay_ms(100);
      Lcd_Init();
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Cmd(_LCD_CURSOR_OFF);
    }
    //=========================================================

    void main(){
         inicijalizacija();
        //============= enter first number
        UART1_Write_Text("first num:");
        UART1_Write(10);
        UART1_Write(13);
           do{
           }while(!UART1_Data_Ready());
        nbr1=UART1_Read();
        IntToStr(nbr1,br);
        strcpy(txt,"Num1:");
        strcat(txt,br);
        empty_spaces(txt);
        Lcd_Out(1,1,txt);
        Delay_ms(1);


        //=============enter second number
        UART1_Write_Text("second num:");
        UART1_Write(10);
        UART1_Write(13);
           do{
           }while(!UART1_Data_Ready());
        nbr2=UART1_Read();
        IntToStr(nbr2,br);
        strcpy(txt,"Num2:");
        strcat(txt,br);
        empty_spaces(txt);
        Lcd_Out(1,10,txt);
        Delay_ms(1);
        //==============================================================

       //enter operation

        UART1_Write_Text("operation(+,-,/,*,%):");
        UART1_Write(10);
        UART1_Write(13);
           do{
           }while(!UART1_Data_Ready());
       operation=UART1_Read();
        strcpy(txt,"oper:");
        switch(back_char(operation)){
            case 0: strcat(txt," ");break;
            case 1:
                    strcat(txt,"+");
                    result=nbr1+nbr2;
                    break;
            case 2:
                    strcat(txt,"-");
                    result=nbr1-nbr2;
                    break;
            case 3:
                    strcat(txt,"*");
                    result=nbr1*nbr2;
                    if(nbr2!=result/nbr1)
                        operation=' ';
                    break;
            case 4:
                    strcat(txt,"/");
                    if(nbr2==0)
                        operation=' ';
                    else{
                        result=nbr1/nbr2;
                        rest=nbr1%nbr2;
                    }
                    break;
            case 5:
                    strcat(txt,"%");
                    if(nbr2==0)
                        operation=' ';
                    else
                        result=nbr1%nbr2;
                    break;
            }
        empty_spaces(txt);
        Lcd_Out(2,1,txt);
        Delay_ms(1);
        //==============================================================

        //============= Print result

        if(back_char(operation)!=0){
            IntToStr(result,br);
            strcpy(txt,"Rez:");
            strcat(txt,br);
            empty_spaces(txt);
            if(back_char(operation)!=4)
                Lcd_Out(2,7,txt);
            else{                      // Dokolku vrednosta od funkcijata vrati_znak(operacija) e 4
                IntToStr(rest,br);      // se raboti za delenje
                empty_spaces(br);
                strcat(txt,"~");
                strcat(txt,br);
                Lcd_Out(2,5,txt);
            }
        }else
            Lcd_Out(2,7,"error!");
        Delay_ms(1);
        //==============================================================
    }
/===============================konfigure液晶显示器
//数据端口B的端口
RB4位的sbit液晶显示器;
RB5位的sbit LCD_EN;
RB0位的sbit LCD_D4;
RB1_位的sbit LCD_D5;
RB2_位的sbit LCD_D6;
RB3_位的sbit LCD_D7;
在TRISB4_位的sbit LCD_r_方向;
在TRISB5_位的sbit LCD_EN_方向;
在TRISB0位的sbit LCD_D4_方向;
在TRISB1_位的sbit LCD_D5_方向;
在TRISB2_位的sbit LCD_D6_方向;
在TRISB3_位的sbit LCD_D7_方向;
//=========================================================
//=============变量
字符操作;
int nbr1=0,nbr2=0,结果=0,其余=0;
char-txt[16],br[7];
//=========================================================
//==========删除空空间
空_空格(字符数组[]){
int j=0,i=0,n=0;
n=strlen(数组);

而(i你可以使用以下事实

(a + b) * c == (a * c) + (b * c)

要将乘法分解为更小的块,但您仍然必须处理这样一个事实,即最终结果可能大于您所使用的任何类型的乘法。

Woa。这是一堆需要费劲处理的代码……我知道,但您如何看待导入大于255的数字。c或其他语言中是否有一些函数?所有代码仍然没有告诉我们什么是“输入错误”。我们需要知道这一点。代码没有显示,但是串行端口显示,因为我发送了大量的数字。但是当我发送字符串时,例如(5*10)*6,是否有函数将字符串转换为int,然后计算语句?或者没有?对不起,我不知道您可以使用什么函数;我只是建议一种方法来解决您的问题,使用较小的操作数。如果您想使用265*3,您可以使用255*3和10*3,然后自己将这两个结果相加,小心处理任何溢出。试图绕过限制总是很痛苦的。祝你好运。