消息关闭
    暂无新消息!
习题2.3 数列求和-加强版   (20分)
给定某数字AA(1\le A\le 91≤A≤9)以及非负整数NN(0\le N\le 1000000≤N≤100000),求数列之和S = A + AA + AAA + \cdots + AA\cdots AS=A+AA+AAA+⋯+AA⋯A(NN个AA)。例如A=1A=1, N=3N=3时,S = 1 + 11 + 111 = 123S=1+11+111=123。

输入格式:

输入数字AA与非负整数NN。

输出格式:

输出其NN项数列之和SS的值。

输入样例:

1 3
输出样例:

123

---------------------------------------------
#include <stdio.h>
int main ()
{
    long int S=0;
    int i,A,N,T=0;

    scanf("%d %d",&A,&N);
    for (i=0;i<N;i++;)
        {
            A=A*10+A;
            S+=A;
        }
    printf("%ld",S);

    return 0;
}



输入1 3的时候不是123而是133 分析不出哪步错了。。。

5个回答

︿ 3
#include <stdio.h>
#include <math.h>

int main ()
{
    long int S=0;
    int i,A,N, tmp = 0;

    scanf("%d%d",&A,&N);
        tmp = A;
        S += tmp;
    if (N >= 2 && N < 10) {
        printf("S = %d + ", tmp);
        for (i = 1; i < N - 1; i++) {
            tmp = A * pow(10, i) + tmp;
            printf("%d + ", tmp);
            S += tmp;
        }
        tmp = A * pow(10, i) + tmp;
        S += tmp;
        printf("%d = %ld\n", tmp, S);
    } else if (N == 1) {
        printf("S = %d = %ld\n", tmp, S);
    }

    return 0;
}

注意分析问题的逻辑,上面的代码作为一个参考吧
︿ 2
还有本题要求实现一个对数组进行循环左移的简单函数:一个数组aa中存有nn(>0>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移mm(\ge 0≥0)个位置,即将aa中的数据由(a_0 a_1 \cdots a_{n-1}a
​0
​​ a
​1
​​ ⋯a
​n−1
​​ )变换为(a_{m} \cdots a_{n-1} a_0 a_1 \cdots a_{m-1}a
​m
​​ ⋯a
​n−1
​​ a
​0
​​ a
​1
​​ ⋯a
​m−1
​​ )(最前面的mm个数循环移至最后面的mm个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:

输入第1行给出正整数nn(\le 100≤100)和整数mm(\ge 0≥0);第2行给出nn个整数,其间以空格分隔。

输出格式:

在一行中输出循环左移mm位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例:

8 3
1 2 3 4 5 6 7 8
输出样例:

4 5 6 7 8 1 2 3
-------------------------------------------------
#include <stdio.h>
int swap (int n[],int m,int l);
int main()
{
    int n[100];
    int l,m,i;

    scanf("%d %d",&l,&m);
    for (i=0;i<l;i++)
        scanf("%d",&n[i]);
    swap(n,m,l);

    return 0;
}

int swap(int n[],int m,int l)
{
    int i,t,j;
    for (i=0;i<m;i++)
        for (j=l;j>0;j--)
            {
            t=n[l-1];
            n[l-1]=n[l-2];
            n[0]=t;
            }
    for (i=0;i>l;i++)
        printf("%d",n[i]);

    return 0;
}
不出结果呀怎么
︿ 0
#include <stdio.h>
int main ()
{
    long int S=0;
    int i,A,N,T=0;

    scanf("%d%d",&A,&N);
    for (T=A,i=0;i<N;i++)
        {
         S+=T;
            T=T*10+A;
        }
    printf("%ld",S);

    return 0;
}