Đánh giá, nhận xét, review các công ty tuyển dụng
Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 15 kết quả

Đề tài: Bài toán tính tổng các chữ số trong dãy n số liên tiếp từ 1 tới n

  1. #1
    Ngày gia nhập
    04 2011
    Bài viết
    2

    Mặc định Bài toán tính tổng các chữ số trong dãy n số liên tiếp từ 1 tới n

    Cho số nguyên dương n, người ta viết các số nguyên liên tiếp từ 1 tới n trong hệ thập phân để tạo ra 1 dãy các chữ số. Tính tổng các chữ số của dãy.

    Input
    Một số n duy nhất (n <= 10^100)

    Output
    Số nguyên duy nhất là kết quả tìm được

    Example

    Input:
    3
    Output:
    6

    Input
    20
    Output
    102

    Ai giúp mình thuật toán hoặc công thức tính cái tổng này với.
    Thanks mọi người trước!

  2. #2
    Ngày gia nhập
    03 2011
    Nơi ở
    Bình Dương, Hồ Chí Minh
    Bài viết
    392

    Trích dẫn Nguyên bản được gửi bởi thesunhcm Xem bài viết
    Cho số nguyên dương n, người ta viết các số nguyên liên tiếp từ 1 tới n trong hệ thập phân để tạo ra 1 dãy các chữ số. Tính tổng các chữ số của dãy.

    Input
    Một số n duy nhất (n <= 10^100)

    Output
    Số nguyên duy nhất là kết quả tìm được

    Example

    Input:
    3
    Output:
    6

    Input
    20
    Output
    102

    Ai giúp mình thuật toán hoặc công thức tính cái tổng này với.
    Thanks mọi người trước!
    Chưa hiểu đề lắm, input 3 và 6 thì hiểu rồi, nhưng các số 20 và 102 tính như thế nào mà ra?

  3. #3
    Ngày gia nhập
    12 2009
    Nơi ở
    bế quan tu lại
    Bài viết
    841

    tính theo kiểu 1+2+3+4+5+6+7+8+9+1+0+1+1+1+2+1+3+1+4+1+5+1+6+1+7+ 1+8+1+9+2+0 đó em

  4. #4
    Ngày gia nhập
    03 2011
    Nơi ở
    Bình Dương, Hồ Chí Minh
    Bài viết
    392

    Trích dẫn Nguyên bản được gửi bởi aydada Xem bài viết
    tính theo kiểu 1+2+3+4+5+6+7+8+9+1+0+1+1+1+2+1+3+1+4+1+5+1+6+1+7+ 1+8+1+9+2+0 đó em
    Ah...thì ra là vậy...
    TKS a nhiều...
    C Code:
    1. #include<stdio.h>
    2. void main()
    3. {
    4.     int n,s=0;
    5.     printf("Nhap n: ");
    6.     scanf("%d",&n);
    7.     for (int i=1;i<=n;i++)
    8.         if (i<10)
    9.             s=s+i;
    10.         else
    11.             s=s+(i%10)+(i/10);
    12.     printf("\nKet qua la: %d\n",s);
    13. }

  5. #5
    Ngày gia nhập
    12 2009
    Nơi ở
    bế quan tu lại
    Bài viết
    841

    C++ Code:
    1. #include <iostream>
    2.  
    3. int TachSo(int x){
    4.     int sum = 0;
    5.     while(x > 0){
    6.              sum += x % 10;
    7.             x /= 10;
    8.         }
    9.     return sum;
    10. }
    11. int main(){
    12.     int n, sum = 0;
    13.  
    14.     std::cout << "Nhap n: ";
    15.     std::cin >> n;
    16.  
    17.     for(int i = 1; i <= n; ++i)
    18.         sum += TachSo(i);
    19.    
    20.     std::cout << sum << std::endl;
    21.     return 0;
    22. }
    em test lại code em với trường hợp số có nhiều hơn 2 chữ số đi vitbau, với n = 102 thì code em là 933 trong khi kết quả đúng là 906 (n = 99 => sum = 900)

  6. #6
    Ngày gia nhập
    03 2011
    Nơi ở
    Bình Dương, Hồ Chí Minh
    Bài viết
    392

    Mặc định Bài toán tính tổng các chữ số trong dãy n số liên tiếp từ 1 tới n

    Trích dẫn Nguyên bản được gửi bởi aydada Xem bài viết
    em test lại code em với trường hợp số có nhiều hơn 2 chữ số đi vitbau, với n = 102 thì code em là 933 trong khi kết quả đúng là 906 (n = 99 => sum = 900)
    Hic...cảm ơn a một lần nữa..
    bài của e ở trên đúng là chỉ có tính dc trường hợp n có 2 chữ số, cho e fix lại:
    C Code:
    1. #include<stdio.h>
    2. void main()
    3. {
    4.     int n,s=0;
    5.     printf("Nhap n: ");
    6.     scanf("%d",&n);
    7.     for (int i=1;i<=n;i++)
    8.     {
    9.         int j=i;
    10.         while (j!=0)
    11.         {
    12.             s=s+(j%10);
    13.             j=j/10;
    14.         }
    15.     }
    16.     printf("\nKet qua la: %d\n",s);
    17. }
    Đã được chỉnh sửa lần cuối bởi vitbau1412 : 30-04-2011 lúc 01:27 AM.

  7. #7
    Ngày gia nhập
    02 2011
    Nơi ở
    hà nội
    Bài viết
    131

    mình làm bài này ko bik lỗi đâu mọi người chỉ zum với
    hic

    C++ Code:
    1. #include<iostream>
    2. using namespace std;
    3. int main()
    4. {
    5.     int i, n, s=0;
    6.     cout<<"N: "; cin>>n;
    7.     for(i=0; i<n; i++)
    8.         do{
    9.             s+=(i+1)%10; i/=10;}while(i);
    10.     cout<<"Tong: "<<s;
    11.     return 0;
    12. }
    Chia tay bình minh

  8. #8
    Ngày gia nhập
    03 2011
    Nơi ở
    Bình Dương, Hồ Chí Minh
    Bài viết
    392

    Trích dẫn Nguyên bản được gửi bởi chiga9x Xem bài viết
    mình làm bài này ko bik lỗi đâu mọi người chỉ zum với
    hic

    C++ Code:
    1. #include<iostream>
    2. using namespace std;
    3. int main()
    4. {
    5.     int i, n, s=0;
    6.     cout<<"N: "; cin>>n;
    7.     for(i=0; i<n; i++)
    8.         do{
    9.             s+=(i+1)%10; i/=10;}while(i);
    10.     cout<<"Tong: "<<s;
    11.     return 0;
    12. }
    Bị vòng lặp vô tận, do biến i của bạn ban đầu là 0 và vì bạn không tạo thêm một biến nào đó để lưu lại giá trị i ban đầu => làm cho i thay đổi nên, biến i sẽ chỉ có 2 giá trị là 0 và 1.
    i/=10 => đây là lí do làm cho i=0
    i++ => lí do làm cho i=1
    i/=10 => biến i bị thay đổi so với lúc đầu, cần phải gán vào biến tạm nào đó

  9. #9
    Ngày gia nhập
    08 2010
    Nơi ở
    Moscow, Russia Federation
    Bài viết
    913

    Toán học một chút để giảm độ phức tạp của thuật toán đi các bạn
    0 1 2 3 4 5 6 7 8 9
    10 11 12 13 14 15 16 17 18 19
    ...
    100 101 102 109
    110 119
    ...
    1000 1001 1009
    ...
    1990 1999
    ...
    Nếu các bạn tìm ra quy luật thì thật tuyệt vời
    Mời các bạn ghé thăm blog cá nhân của tôi

  10. #10
    Ngày gia nhập
    02 2011
    Nơi ở
    hà nội
    Bài viết
    131

    Trích dẫn Nguyên bản được gửi bởi mp121209 Xem bài viết
    Toán học một chút để giảm độ phức tạp của thuật toán đi các bạn
    0 1 2 3 4 5 6 7 8 9
    10 11 12 13 14 15 16 17 18 19
    ...
    100 101 102 109
    110 119
    ...
    1000 1001 1009
    ...
    1990 1999
    ...
    Nếu các bạn tìm ra quy luật thì thật tuyệt vời
    hay wa' anh ơi!~... thanks a
    số có 1 chữ số là s1, số có 2 chữ số bỏ đuôi đi
    thì bằng s1x10, đuôi sẽ bằng s1x9
    ko biết ý e như vậy có đc ko anh??
    Đã được chỉnh sửa lần cuối bởi chiga9x : 30-04-2011 lúc 04:40 AM.
    Chia tay bình minh

Các đề tài tương tự

  1. đưa ra dãy số dương liên tiếp dài nhất trong mảng!
    Gửi bởi xoycontinue trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 03-11-2011, 10:19 PM
  2. Lập trình C++ Tìm tập số có tổng bằng X trong tập N số tự nhiên liên tiếp từ 0->N
    Gửi bởi kukopuka trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 22-06-2011, 09:56 AM
  3. tìm 3 số liên tiếp có tích nhỏ nhất và 3 số liên tiếp có tổng lớn nhất trong dãy số thực
    Gửi bởi starter trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 19
    Bài viết cuối: 11-06-2011, 11:36 AM
  4. Kiểm tra dãy k số liên tiếp trong một mảng!
    Gửi bởi kanguru_91 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 18-06-2010, 05:32 AM
  5. dãy số liên tiếp trong một mảng
    Gửi bởi saocodon trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 03-03-2010, 06:07 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn