「PAT乙级真题解析」Basic Level 1101 B是A的多少倍 (问题分析+完整步骤+伪代码描述+提交通过代码)
admin
2024-03-08 09:27:03

乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

PAT (Basic Level) Practice 1101 B是A的多少倍

问题分析

题设明确要求按照其给定的步骤变换给定的正整数, 然后输出变换后的正整数是输入正整数的多少倍。
所以重点在于转换逻辑的编写。由于给定的正整数不大于10的9次方, 所以可以用整型存储。
但是涉及到部分数位的移动, 使用整型时获取各个数位的数字时需要从后往前, 这里不太适合,
所以最佳方式时使用字符串存储正整数, 变换之后得到新的字符串, 然后将两个字符串转换为整型后相除。

完整描述步骤

  1. 获取输入: 正整数A, 需要截取的位数D
  2. 初始化正整数B(字符串形式)
  3. 从A的倒数第D位开始到最后一位:
    • 将当前数字字符加到字符串B的末尾
  4. 从A的第一位开始到倒数第D位:
    • 将当前数字字符加到字符串B的末尾
  5. 转换A和B为数值类型
  6. 输出B除以A的结果(保留2位小数)

伪代码描述

  1. get input: origin_number, cut_width
  2. init new_number;
  3. for i in range(length(origin_number) - cut_width, length(origin_number)):
    • new_number += origin_number[i]
  4. for i in range(0, length(origin_number) - cut_width):
    • new_number += origin_number[i]
  5. print(int(new_number) / int(origin_number))

完整提交代码

/*
# 问题分析
题设明确要求按照其给定的步骤变换给定的正整数, 然后输出变换后的正整数是输入正整数的多少倍。
所以重点在于转换逻辑的编写。由于给定的正整数不大于10的9次方, 所以可以用整型存储。
但是涉及到部分数位的移动, 使用整型时获取各个数位的数字时需要从后往前, 这里不太适合,
所以最佳方式时使用字符串存储正整数, 变换之后得到新的字符串, 然后将两个字符串转换为整型后相除。# 完整描述步骤
1. 获取输入: 正整数A, 需要截取的位数D
2. 初始化正整数B(字符串形式)
3. 从A的倒数第D位开始到最后一位:- 将当前数字字符加到字符串B的末尾
4. 从A的第一位开始到倒数第D位:- 将当前数字字符加到字符串B的末尾
5. 转换A和B为数值类型
6. 输出B除以A的结果(保留2位小数)# 伪代码描述
1. get input: origin_number, cut_width
2. init new_number;
3. for i in range(length(origin_number) - cut_width, length(origin_number)):- new_number += origin_number[i]
4. for i in range(0, length(origin_number) - cut_width):- new_number += origin_number[i]
5. print(int(new_number) / int(origin_number))
*/# includeint calculate_number_length(char* number){int length = 0;for (int i = 0; number[i]; i++){length++;}return length;
}int transform_number(char* origin_number, int cut_width, char *new_number){int length = calculate_number_length(origin_number);new_number[length] = 0;for (int i = length - cut_width; i < length; i++){new_number[i+cut_width-length] = origin_number[i];}for (int i = 0; i < length - cut_width; i++){new_number[i+cut_width] = origin_number[i];}
}double calculate_multiple(char* origin_number, char* new_number){int length = calculate_number_length(origin_number);int divisor = 0, dividend = 0;for (int i = 0; i < length; i++){divisor = divisor * 10 + (origin_number[i] - '0');dividend = dividend * 10 + (new_number[i] - '0');}return (double)dividend / divisor;
}int main(){char origin_number[11];int cut_width;scanf("%s %d", origin_number, &cut_width);char new_number[11];transform_number(origin_number, cut_width, new_number);printf("%.2f", calculate_multiple(origin_number, new_number));return 0;
}

相关内容

热门资讯

风与潮让澳门抗战史更鲜活 【#风与潮让澳门抗战史更鲜活# 】#风与潮兼具文献价值与史诗品格# 融历史之光,照湾区之路,由@任嘉...
投资者提问:尊敬的董秘您好,随... 投资者提问:尊敬的董秘您好,随AI行业高速发展,个人数据安全,隐私安全面临更多安全隐患,请问贵司推出...
投资者提问:董秘,您好!请问公... 投资者提问:董秘,您好!请问公司截至1月10日的股东人数是多少?谢谢董秘回答(启明星辰SZ00243...
投资者提问:今天2025123... 投资者提问:今天20251231日,公司发布员工借款管理办法,整体上是支持的,但有两个问题,请董秘回...
茅台自营门店放宽政策:纳税百万... 1月16日,据21财经报道,茅台全国多地自营门店今年放宽了政策:前一年纳税额达到100万元的民企客户...