Giúp tìm lỗi sai trong chương trình đếm số kí tự (trừ dấu) của 1 số

Viết chương trình nhập vào một số nguyên n và in ra màn hình số kí tự (trừ dấu) của số đó.
Ví dụ

Đầu vào Đầu ra
-1593 4

chương trình em viết

#include <stdio.h>//thu voi 1000 bi loi
#include <stdlib.h>
#include<math.h>

int main()
{
    int a,i,max,t;
    scanf("%d",&a);
    for(i=1;i<=20;i++){
            max=a/pow(10,i);
            if(abs(max)<=9&& abs(max)>=1){
                t=i+1;
            }

    }
    printf("%d",t);

}

em thử các số đều thỏa mãn .Nhưng thử số 1000 nó lại ra là 8 kí tự.Em thử 999 và 1001 thì nó vẫn đúng


Em mới học lập trình nên ko biết nhiều ạ.Anh chị có thể gợi ý cho em cách để chương trình chạy đúng dc không:)))
Em cảm ơn nhiều ạ

Về cở bản thì là thuật toán của bạn bị sai. :slight_smile:

Để ý một chút là một số x dạng abcd thì [x / 10] bằng abc. ([] là phép toán lấy phần nguyên)

Vậy cứ chia lấy nguyên x cho 10 mỗi vòng lặp đến khi nào x bằng 0 thì thôi. Và số vòng lặp sẽ bằng số ký tự của x.

Code
#include <stdio.h>

int main() {
    int a = 0, numOfDigits = 0;
    scanf("%d", &a);
    do {
        a /= 10;
        numOfDigits++;
    } while (a != 0);
    printf("%d\n", numOfDigits);
    return 0;
}
3 Likes

Cái compiler TDM của CB nó mát rồi bạn: http://ideone.com/RKDcSZ, đổi gấp IDE thôi :smiley:

3 Likes

em cảm ơn ạ…

Em hiểu rồi.Cảm ơn anh

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?