oj问题-为什么我的这个大数相加程序在oj上跑出来的结果是OLE

问题描述

为什么我的这个大数相加程序在oj上跑出来的结果是OLE
 #include<stdio.h>#include<string.h>int main(){    char str1[1001]str2[1001]*num1*num2*p1*p2;    int ncase/*多组输入数目*/mcase=1/*输出时的第几个输出计数器*/up/*进位存储器*/len1len2len;    scanf(""%d""&ncase);    while(ncase--)    {        scanf(""%s %s""str1str2);        printf(""case %d:n""mcase++);        printf(""%s + %s = ""str1str2);         len1=strlen(str1);/*分别计算两数长度*/        len2=strlen(str2);        if( len1 >= len2 )/*把num1赋较大数的数组首地址num2赋较小数的数组首地址,且保证len1存长数组长度len2存短数组长度*/        {            num1=str1;            num2=str2;        }        else        {            num1=str2;            num2=str1;            len=len1;            len1=len2;            len2=len;        }        up=0;/*进位赋初值0*/        for(p1=num1+len1-1p2=num2+len2-1;p1>=num1;p1--p2--)/*从各自最小位逐位相加,以较大数的最高位为边界*/        {            if( p2 < num2 )/*当高位无数时补0*/                *p2=48;            *p1=*p1+*p2-96+up;/*由ascII码值化为十进制值*/            up=0;            if( *p1 >= 10 )/*如果此位相加结果十进制值大于10则作减10处理*/            {                *p1-=10;                up=1;/*进位寄存器赋1*/            }            *p1+=48;/*再次化为ascII码以供输出*/        }        if( up == 1 )/*当最高位加上进位仍产生进位则需于前再输出一个“1”*/            printf(""1"");        printf(""%sn""num1);/*输出经加法处理改动的大数组*/        printf(""n"");    }    return 0;}

解决方案

  • 不知道是你代码的问题还是你贴代码上来转换的原因。缺少若干个*
  • 修改后的代码如下所示
  • 下次贴代码的时候记得用“插入代码片”的功能
#include <stdio.h>#include <string.h>#include <stdlib.h>int main(){    char str1[1001] str2[1001] *num1 *num2 *p1 *p2;    int ncase/*多组输入数目*/ mcase = 1/*输出时的第几个输出计数器*/ up/*进位存储器*/ len1 len2 len;    scanf(""%d"" &ncase);    while (ncase--)    {        scanf(""%s %s"" str1 str2);        printf(""case %d:n"" mcase++);        printf(""%s + %s = "" str1 str2);        len1 = strlen(str1);/*分别计算两数长度*/        len2 = strlen(str2);        if (len1 >= len2)/*把num1赋较大数的数组首地址num2赋较小数的数组首地址,且保证len1存长数组长度len2存短数组长度*/        {            num1 = str1;            num2 = str2;        }        else        {            num1 = str2;            num2 = str1;            len = len1;            len1 = len2;            len2 = len;        }        up = 0;/*进位赋初值0*/        for (p1 = num1 + len1 - 1 p2 = num2 + len2 - 1; p1 >= num1; p1-- p2--)/*从各自最小位逐位相加,以较小数的最高位为边界*/        {            if (p2 < num2)/*当高位无数时补0*/                *p2 = 48;            *p1 = *p1 + *p2 - 96 + up; /* 由ascII码值化为十进制值*/            up = 0;            if (*p1 >= 10) /* 如果此位相加结果十进制值大于10则作减10处理*/            {                *p1 -= 10;                up = 1; /* 进位寄存器赋1*/            }            *p1 += 48; /* 再次化为ascII码以供输出*/        }        if (up == 1)/*当最高位加上进位仍产生进位则需于前再输出一个“1”*/            printf(""1"");        printf(""%sn"" num1);/*输出经加法处理改动的大数组*/        printf(""n"");    }    system(""pause"");    return 0;}
时间: 2024-10-31 04:35:14

oj问题-为什么我的这个大数相加程序在oj上跑出来的结果是OLE的相关文章

c++-这个大数相加程序用了哪些算法在逻辑结构上定义了哪些算法并求流程图

问题描述 这个大数相加程序用了哪些算法在逻辑结构上定义了哪些算法并求流程图 #include #include #include #define max(a,b) (a)>(b)?(a):(b) int big_add(char*,char*,char*); int big_compare(char*,char*,int*); int is_number_string(char*); int main() { char num1[80],num2[80],num3[100]; puts("

C++实现的一个简单两个大数相加程序!

#include <iostream> using namespace std; #define ARRAY_SIZE 50 //Enter a big number, and store it as a string into an array ch, //the size is the numbers of char. void inputNumbers(char ch[], int& size); //Reverse the elements of the array ch. v

大数相加(不开辟额外空间)

大数相加可以借助多种方法来实现,这里提供了一种链表节点的数据域为int型(用char型也可以,这样更省空间)的思路.这篇文章采用常用的转变为字符串进行处理的方法,下面说下我用字符串实现大数相加的思路: 假设输入了如下两个字符串(其中上面的红色部分表示数组的下标,下面的绿色和黄色部分表示各字符): s1: s2: 很明显,s1的实际长度为4,s2的实际长度为7,将二者在最低位出对齐,并将前面空出来的高位用0替换,最高位留出来,以备相加到最左边有进位时,可以保存进位1.移位后如下所示: s1: s2

用Javascript实现两个大数相加

(function(){ var addLarge = function(n1,n2){ var over = 0; var ret = ""; var len = Math.min(n1.length,n2.length); var sln1 = n1.substr(n1.length - len,n1.length ); var sln2 = n2.substr(n2.length - len,n2.length ); for(var i = len;i > 0; i--)

java中大数相加怎么解决

问题描述 BigDecimal b1 = new BigDecimal(Double.toString(11111111111111111111.0)); BigDecimal b2 = new BigDecimal(Double.toString(1.0)); System.out.println(b1.add(b2)) 结果是11111111111111110001.0,为神马? 解决方案 这样就对: BigDecimal b1 = new BigDecimal("1111111111111

HDOJ1002题A + B Problem II,2个大数相加

Problem Description I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. Input The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines fol

POJ 1503 Integer Inquiry 简单大数相加

Description One of the first users of BIT's new supercomputer was Chip Diller. He extended his exploration of powers of 3 to go from 0 to 333 and he explored taking various sums of those numbers. This supercomputer is great,'' remarked Chip.I only wi

[算法系列之八]大数问题(高精度运算)

[大数相加] [代码一] /********************************* * 日期:2015-01-28 * 作者:SJF0115 * 题目: 大数加法(高精度加法) * 博客: **********************************/ #include <iostream> using namespace std; string AddString(string num1,string num2){ int len1 = num1.length(); in

c-判断32位数相加溢出问题?

问题描述 判断32位数相加溢出问题? 编写了一个程序,两个有符号的32位数相加如果正溢出,则输出 2147483647:如果负溢出,则输出(-2147483647-1):如果不溢出,则输出 运算结果.然后试了几个数,并不能理解输出的结果,请一一指出每条运算结果的解释,谢谢. 解决方案 首先要看你的程序里面整数类型是int还是unsigned int他们两个的范围不同, int 的取值范围是 -2147483648 ~ +2147483647, 而unsigned int 的取值范围是0 ~ 42