20200607整理

20200607做题整理
pat乙真题两道

部分A+B
链接:https://www.nowcoder.com/questionTerminal/fb581ea099a14f5d97c6149cbeee249f
来源:牛客网

正整数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的值。

示例1
输入

3862767 6 13530293 3

输出
399

#include<stdio.h>
#include<string.h>
long part(char a[],int num);

int main(void){
    int DA,DB;
    char A[11],B[11];
    scanf("%s %d %s %d",A,&DA,B,&DB);
    printf("%d\n",part(A,DA)+part(B,DB));
    return 0;
}

long part(char a[],int num){
    int len=strlen(a);
    int i;
    int cnt=0;
    long ans=0;
    for(i=0;i<len;i++){
        if((a[i]-'0')==num)
            cnt++;
    }
    if(cnt==0){		//对于不存在DA的情况返回0
        return 0;
    }else{
        for(i=0;i<cnt;i++)
            ans=num+ans*10;
    }
    return ans; 
}

小结
最开始运行出现问题,一方面是函数原型没有在最开始声明,一方面是返回值类型设置的int而不是Long,另外是在下面的part中循环变量稍微简化了。一起更正后拿到ac,但不知是哪一处,想了想觉得函数原型漏了而导致错误的可能性大一点。



A除以B
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

输入描述:
输入在1行中依次给出A和B,中间以1空格分隔。

输出描述:
在1行中依次输出Q和R,中间以1空格分隔。

输入例子:
123456789050987654321 7

输出例子:
17636684150141093474 3

#include<stdio.h>
#include<string.h>
#define MAX 1001
int main(void){
    char a[MAX];
    char q[MAX];
    int b,r;
    scanf("%s %d",a,&b);
    int len=strlen(a);
    int borr=0,i;
 
    for(i=0;i<len;i++){
        q[i]='0'+((a[i]-'0')+borr*10)/b;
        borr=(a[i]-'0')+borr*10-(q[i]-'0')*b;
    }
    if(q[0]=='0'){
        for(i=1;i<len;i++){
            printf("%c",q[i]);
        }
    }else{
        for(i=0;i<len;i++){
            printf("%c",q[i]);
        }
    }
    printf(" %d\n",borr);
    return 0;
}

小结
一次过。
借一位的除法(像个小学生一样……)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值