首页 > 技术文章 > 1016 部分A+B 1017 A除以B

huigugu 2022-04-05 17:44 原文

天气好

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。

现给定 AD**ABD**B,请编写程序计算 P**A+P**B

输入格式:

输入在一行中依次给出 AD**ABD**B,中间以空格分隔,其中 0<A,B<109。

输出格式:

在一行中输出 P**A+P**B 的值。

输入样例 1:

3862767 6 13530293 3

输出样例 1:

399

输入样例 2:

3862767 1 13530293 8

输出样例 2:

0

题解:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main()
{
	char arra[11];
	char a;
	char arrb[11];
	char b;
	int counta = 0;
	int countb = 0;
	int i, j;
	for (i = 0; arra[i - 1] != ' '; i++)
	{
		scanf("%c", &arra[i]);
	}

	scanf("%c ", &a);

	for (j = 0; arrb[j - 1] != ' '; j++)
	{
		scanf("%c", &arrb[j]);
	}

	scanf("%c", &b);

	for (int temp = 0; temp < i-1; temp++)
	{
		if (arra[temp] == a)
			counta++;
	}
	for (int temp = 0; temp < j-1; temp++)
	{
		if (arrb[temp] == b)
			countb++;
	}

	int sum = 0;
	for (int temp = 0; temp < counta; temp++)
	{
		sum += (a - '0') * pow(10, temp);
	}
	for (int temp = 0; temp < countb; temp++)
	{
		sum += (b - '0') * pow(10, temp);
	}

	printf("%d", sum);
}

总结:

写的挺蠢的,倒是能跑。

聪明点的方法,将A,B设成数字,每次对10取余就行。

1017 A除以B (20 分)

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

输入格式:

输入在一行中依次给出 AB,中间以 1 空格分隔。

输出格式:

在一行中依次输出 QR,中间以 1 空格分隔。

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

题解:

#include<stdio.h>

int main()
{
	int arr[2000];
	char n='1';
	int x;
	int yushu;
	int count = 0;
	for (int i = 0; n != ' '; i++)
	{
		scanf("%c", &n);
		arr[i] = n - '0';
		count++;
	}
	scanf("%d", &x);

	yushu = arr[0];
	int out[2000];
	int i;

	if (arr[0] < x && arr[1] < 0)
	{
		printf("0 %d", arr[0]);
		return 0;
	}


	for (i = 0; i < count-2; i++)
	{
		if (yushu + arr[i + 1] != 0)
		{
			out[i] = (yushu * 10 + arr[i + 1]) / x;
			yushu = (yushu * 10 + arr[i + 1]) % x;
		}

		else
		{
			out[i] = 0;
			yushu = 0;
		}
	}

	for (int j = 0; j < i; j++)
	{
		printf("%d", out[j]);
	}
	printf(" %d", yushu);
}

总结:

这题还挺有意思的,分解了除法,用程序做到了竖式除法。

有三个比较有意思的点

  1. 输入。因为要一个一个读取数字,一开始我用的字符型数组,每次调用还得-'0',后来突然开悟,在读入的时候转成int型不就行了
  2. 一个情况,比如一虎(2200)除以2,就会出现0/2的,要额外列出
  3. 一个坑,如果除数大于被除数,比如1 6,按原来的算法就不行,要额外列出

推荐阅读