1016部分A+B(c语言版)1.0
题目描述
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。
现给定A、DA、B、DB,请编写程序计算PA + PB。
输入描述:
输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010。
输出描述:
在一行中输出PA + PB的值。
输入例子:
3862767 6 13530293 3
输出例子:
399
注意:
考虑字符串的输入方式(至少有gets(),scanf("%s",&a);这两种一块输入的),前导0,以及相加时出现的进位问题。
代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char a[11]={0},b[11]={0};
int a1[11],a2,a3[11]={0},b1[11],b2,b3[11]={0},c[11]={0};
//类似c[11]={0}的必须初始化,会用到数组的默认值,这样初始化数组是避免程序崩溃的好方法。
int i,k=0,j=0;
int lena,lenb,sum;
scanf("%s%d%s%d",&a,&a2,&b,&b2);
lena=strlen(a);
lenb=strlen(b);
// char转int
for(i=0;i<lena;i++)
{
a1[i]=a[i]-48;
}
for(i=0;i<lenb;i++)
{
b1[i]=b[i]-48;
}
for(i=0;i<lena;i++)
{
if(a1[i]==a2)
a3[k++]=a1[i];
}
for(i=0;i<lenb;i++)
{
if(b1[i]==b2)
b3[j++]=b1[i];
}
//相加部分
if((k||j)&&a2 !=0&&b2!=0)
{
i=0;
while(k&&j)
{
c[i]+=a2+b2;
c[i+1]=c[i]/10;
c[i]=c[i]%10;
k--;
j--;
i++;
}
while(k)
{
c[i]+=a2;
c[i+1]=c[i]/10;
c[i]=c[i]%10;
i++;
k--;
}
while(j)
{
c[i]+=b2;
c[i+1]=c[i]/10;
c[i]=c[i]%10;
i++;
j--;
}
if(c[i]==0)
sum=i-1;
else
sum=i;
for(i=sum;i>=0;i--)
printf("%ld",c[i]);
}
else
printf("0");
system("pause");
return 0;
}
最后说明下,本篇所用的方法并不简便,可能比较复杂。因我用了写高精度整数相加的一些思想。有其他的方法或想法,可以一起讨论!有不足之处,也希望大家指出。