1016 部分A+B (15分)
正整数 A 的“D A (为 1 位整数)部分”定义为由 A 中所有 D A 组成的新整数 P A 。例如:给定 A=3862767,D A =6,则 A 的“6 部分”P A 是 66,因为 A 中有 2 个 6。
现给定 A、D A 、B、D B ,请编写程序计算 P A +P B 。
输入格式: 输入在一行中依次给出 A、D A 、B、D B ,中间以空格分隔,其中 0<A,B<10 10 。
输出格式: 在一行中输出 P A +P B 的值。
输入样例 1: 3862767 6 13530293 3 输出样例 1: 399 输入样例 2: 3862767 1 13530293 8 输出样例 2: 0
先剖析一下题意: 直接看样例 3862767 和 6 , 13530293 和 3; 意思就是看看 6 在这一大串数字里出现几回,出现一回就是6,出现2回就是66,3回就是666;这里是66; 同理,3在13530293中出现3回,那就是333; 然后再把66和333加起来就行了,也就是输出样例!
代码如下
#include<stdio.h>
#include<string.h>//感觉将数字换成字符串和字符会比较容易些
int main()
{
int count1=0,count2=0,s1,s2,i;//count用来计算出现的次数
char A[10000],B[10000],a,b;//2个比较大的数组存放字符串
scanf("%s %c %s %c",&A,&a,&B,&b);
s1=strlen(A);
s2=strlen(B);//计算字符串长度
for(i=0;i<s1;i++)
{
if(A[i]==a)
count1++;
}
for(i=0;i<s2;i++)
{
if(B[i]==b)
count2++;
}
int c,d,c1,d1;//c和d用来计算最后的相加
c1=c=a-'0';//将字符转换为数字,方便下面计算
d1=d=b-'0';
if(count1==0)//考虑出现次数为0的情况,直接把值赋为0;
{
c=0;
}
if(count2==0)
{
d=0;
}
for(i=1;i<=count1-1;i++)
{
c=c*10+c1;//利用循环将‘6’转化成‘66’
}
for(i=1;i<=count2-1;i++)
{
d=d*10+d1;//利用循环将‘3’转化成‘333’
}
printf("%d",c+d);
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_52557422/article/details/112689426