用c语言写求m+mm+mmm+mmmm+...+mmm...mmm(n个m)的和。
时间: 2023-09-14 16:10:06 浏览: 362
以下是用 C 语言实现的代码:
```c
#include<stdio.h>
int main()
{
int m, n, sum = 0, i, j, temp = 0;
printf("请输入m和n的值(用空格隔开):");
scanf("%d%d", &m, &n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= i; j++)
{
temp = temp * 10 + m; // 每次将上一个数乘10加上m得到当前数
}
sum += temp; // 将当前数累加到总和中
temp = 0; // 将temp清零
}
printf("结果为:%d", sum);
return 0;
}
```
代码思路如下:
1. 读入 m 和 n 的值。
2. 使用两重循环,外层循环控制相加数的个数,内层循环控制每个相加数的位数。
3. 在内层循环中,使用一个变量 temp 记录当前相加数的值。每次将上一个数乘10加上 m 得到当前数。
4. 将当前相加数累加到总和中,然后将 temp 清零。
5. 循环结束后,输出总和。
例如,当输入 m = 2, n = 3 时,程序输出结果为 246。
相关问题
输入2个正整数m和n。 求和:m+mm+mmm+mmmm+ ... +mmm……mmm(n个m)
### 回答1:
这道题的意思是求m+mm+mmm+mmmm+...+mmm...mmm(n个m)的和。
其中,mm表示m乘以10再加上m,mmm表示mm乘以10再加上m,以此类推,直到有n个m。
我们可以用一个循环来实现这个求和过程,每次循环都将上一次的结果乘以10再加上m,最后将所有结果相加即可。
具体实现可以参考以下代码:
```
m = int(input("请输入m:"))
n = int(input("请输入n:"))
result = 0
temp = m
for i in range(n):
result += temp
temp = temp * 10 + m
print("m+mm+mmm+mmmm+...+mmm...mmm(n个m)的和为:", result)
```
希望能对你有所帮助!
### 回答2:
题目中要求求解一个形如:m + mm + mmm + mmmm + ... + mmm…mmm(n个m)的和。我们可以通过数学公式来解决这个问题。
我们从最简单的情况开始考虑:
当n=1时,和为 m。
当n=2时,和为 m + mm = m + 10m = 11m。
当n=3时,和为 m + mm + mmm = m + 10m +100m = 111m。
可以发现,当n增加1时,每个加数都会增加10的幂次,而这个幂次恰好是n-1。
基于此,我们可以得到一个公式:
m + mm + mmm + mmmm + ... + mmm…mmm(n个m)= m(1 + 11 + 111 + 1111 + ... + 111...1(n个1))
其中,第i项是由i个1组成的数,即: 111...1(i个1)(1 ≤ i ≤ n)。
现在,我们把它转化为一个等比数列求和。其中,首项为1,公比为10,项数为n。
所以,原式可以进一步转化为:
m(1 + 11 + 111 + 1111 + ... + 111...1(n个1)) = m(10^n - 1)/9。
因此,我们可以得到最终的答案:m(10^n - 1)/9。
总之,题目中要求我们求解的和可以通过数学公式进行求解,这个公式是m(10^n - 1)/9。
### 回答3:
首先,我们需要明确题目的意思,题目要求求出这样一组数的和:m + mm + mmm + mmmm + … + m(n个m)。其中,每一项的数字个数不同,而且每个数字都是m。例如,当m为3,n为4时,这组数的和为3 + 33 + 333 + 3333 = 3702。
接下来,我们需要考虑如何求解这组数的和。通常情况下,我们可以使用循环来计算每一项的值,最后将它们加起来。但是,这种方法很容易出错,并且在n很大时效率较低。
相比之下,数学方法可能更加高效。我们可以将每一项拆分成m加上一些后导0的数字,并将它们相加。例如,在上面的例子中,第二项可以拆分成30 + 3,第三项可以拆分成300 + 30 + 3,依此类推。
接下来,我们需要确定每个数字前面有多少个0。我们可以发现,第k项前面的0的个数是k-1个9。例如,在上面的例子中,第一项前面没有0,第二项前面有1个0,第三项前面有2个0,第四项前面有3个0。
现在,我们可以拆分出每个数字,并计算出它们的前导0的个数。然后,我们将它们相加即可得到答案。在代码中,我们可以使用一个循环来计算每个数字的值和前导0的个数,然后将它们相加即可。
以下是Python代码示例:
```python
m, n = map(int, input().split())
result = 0
for k in range(1, n+1):
# 计算第k项的值和前导0的个数
value = m * (10**(k-1) - 1) // 9
zeros = k - 1
# 将它们相加
result += value * (10**zeros) + m * (10**zeros)
print(result)
```
在这个例子中,我们首先从用户输入中读取m和n的值。然后,我们使用一个循环来计算每个数字的值和前导0的个数。最后,我们将它们相加即可得到答案。
需要注意的是,由于这个求和式的数字个数随着n的增大而指数级增长,因此当n较大时,计算结果可能会非常大,甚至超出计算机的表示范围。在这种情况下,我们可以使用一些高精度计算库来处理结果。
输入2个正整数m和n。 求和:m+mm+mmm+mmmm+ ... +mmm……mmm(n个m)\n\n例如:输入:6和5,则求和:6+66+666+6666+66666 并输出。
### 回答1:
输入两个正整数m和n,求和公式为:m+mm+mmm+mmmm+ ... +mmm……mmm(n个m)。
例如,输入6和5,则求和为:6+66+666+6666+66666。
以下是Python代码实现:
m = int(input("请输入正整数m:"))
n = int(input("请输入正整数n:"))
sum = 0
for i in range(1, n+1):
sum += int(str(m)*i)
print("求和结果为:", sum)
### 回答2:
首先,我们可以通过字符串拼接来生成每一项的值。考虑到较长的计算,我们可以使用Python的append和join方法。具体来说,我们循环生成n项,将每一项的字符串相加,最后转换为整数再累加即可。
代码如下:
```
m, n = map(int, input().split())
cur = str(m)
s = 0
for i in range(n):
s += int(cur)
cur += str(m)
print(s)
```
首先,我们用map()函数将输入的字符串转换成整数m和n。接着,我们定义一个变量cur,初始值为m的字符串表示,用于记录当前项的值。同时,我们定义一个变量s,用于累加每一项的值。
在循环中,我们先将当前项的值加到s中。接着,通过cur += str(m)来更新当前项的值,即在当前项的字符串表示后面加上一个m。最后,我们将s输出即可。
以上就是本题的完整解答。
### 回答3:
这道题需要我们注意到每个数都是由n个m组成的,并且每个数的位数都不同。解决这道题的方法是利用循环嵌套来生成每一个数,然后再将它们加起来。
首先,我们需要用一个循环来控制生成的数的个数(也就是n个m组成的数)。在每个循环中,我们需要用另一个循环来生成这个数。
在内层的循环中,我们需要首先计算出这个数的位数。因为这个数的位数取决于n的值,所以我们可以先将m转换为字符串,然后计算出字符串长度。
然后,我们需要利用这个位数来生成这个数。我们可以用另外一个循环来实现。在每个循环中,我们需要将m乘以一个代表当前所在位数的数,然后将结果加起来。例如,在生成6 66时,我们需要用6乘以1,6乘以10,然后将它们加起来得到66。
最后,我们将每个数加起来,并输出结果即可。在代码中,我们可以使用字符串拼接的方式来生成每个数。代码如下:
```python
m, n = map(int, input().split())
sum = 0
current_num = ''
for i in range(n):
current_num += str(m)
num_of_digits = len(current_num)
current_sum = 0
for j in range(num_of_digits):
current_sum += int(current_num[j]) * (10 ** (num_of_digits - j - 1))
sum += current_sum
print(sum)
```
在上面的代码中,我们首先定义了变量sum来表示最终的结果。然后,我们用一个循环来生成每个数。在每个循环中,我们利用字符串拼接来生成current_num变量,然后计算current_num的位数。然后,我们用另一个循环来实现将current_num转换为数字并将其加起来。最后,我们将结果加到sum变量中,并输出sum的值。
阅读全文