问题描述:
求一道c语言习题,是数字相加的
给定一个表达式
ABCDE+ACEXD = MBBEEX
上述表达式为一个运算,是两个五位数相加,结果等于一个六位数
要求第一个五数中,出现的数字,要和第二个五位数中的数字相同
即例如 (只是假设)如果12345是第一个五位数,则135x4要是第二个五位数(x可以为任意数字)
但是结果中,要求结果(只是假设)是m2255x(m是任意数字,x与第二个五位数中的x相同)
求出所有满足条件的五位数和六位数
输出结果的格式是
ABCDE = .,ACEXD = .and BBEEX = .是一种组合
将所有组合全部输出
.
输出结果里的BBEEX 是 MBBEEX 写错了.
1个回答
分类:
综合
2014-11-07
问题解答:
我来补答
是否要求每个字母代表不同的数字?
再问: 要求ABCDE = ....., ACEXD = ..... and MBBEEX
就是,第一个数字的第1位要求等于第二个数字的第1位,
第一个数字的第2位,要求等于想家结果的2,3位的数字。。。
就是找这样的数。。。
再答: 单纯地循环会造成海量的运算,可以在编程前进行分析分析下数字关系:最高位M=1,A>5(否则就不可能加成六位数)个位:E+D=X,或E+D=X+10十位:D+X=E、D+X=E+10,,或D+X+1=E、D+X+1=E+10当个位为E+D=X+10时,由D+X+1=E、D+X+1=E+10可推出2D=9或2D=19,均不和题目要求。 所以E+D=X由 D+X=E 可推出 D=0,E=X,结合百位以上可得C=0,2A=B+10;由 D+X=E+10 可推出 D=5,E+5=X,结合百位以上可得C=9,2A=B+9.据此可编写程序。#include
void main()
{
long int x1,x2,x3;
long int a,b,c,d,e,x,m=1;
for (a=5;a<9;a++)
for (e=0;e<9;e++)
{ d=0; //十位相加没进位
x=e;
c=0;
b=2*a-10;
x1=a*10000+b*1000+c*100+d*10+e;
x2=a*10000+c*1000+e*100+x*10+d;
x3=100000+b*10000+b*1000+e*100+e*10+x;
if (x1+x2==x3) printf("%ld + %ld = %ld\n",x1,x2,x3);
d=5; //十位相加有进位
x=e+5; if(x>10) break;
c=9;
b=2*a-9;
x1=a*10000+b*1000+c*100+d*10+e;
x2=a*10000+c*1000+e*100+x*10+d;
x3=100000+b*10000+b*1000+e*100+e*10+x;
if (x1+x2==x3) printf("%ld + %ld = %ld\n",x1,x2,x3);
}
getch();
}
展开全文阅读