Bài 17 : Viết chương trình nhập số nguyên lớn N (khai báo:long N) có k chữ số
Tải code tại đây
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
| /* Bài 17/66/SBT Trường CNTP:Viết chương trình nhập số nguyên lớn N (khai báo:long N) có k chữ số .
- Tìm chữ số hàng đầu tiên của N.
- Tính tổng các chữ số của N.
- Tìm chữ số lớn nhất trong k chữ số đó.
- Đếm số chữ số của N.
- N có phải là số có các chữ số khác nhau đôi một không ? . 630.cpp */
// Các thư viện sử dụng trong chương trình .
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
#define MAX 100
// Hàm nhập vào số nguyên lớn .
void NhapN(long &n)
{
printf("\nNhap Vao So Nguyen : ");
scanf("%ld",&n);
}
// Hàm xuất ra số nguyên .
void XuatN(long n)
{
printf("So Ban Vua Nhap Vao La:%ld",n);
}
// Hàm trả về giá trị từng chữ số của số vừa nhập và được lưu vào trong mảng 1 chiều .
int XuLyDuLieu(int a[],long n)
{
int i=0;
while(n!=0)
{
a[i]=n%10;
n=n/10;
i++;
}
return i;
}
// Hàm liệt kê các chữ số .
void LietKeCacChuSo(int a[],long n)
{
int s=XuLyDuLieu(a,n);
printf("\nCac Chu So Cua So %ld La:",n);
for(int k=s-1;k>=0;k--)
{
printf("%4d",a[k]);
}
}
// Hàm tìm chữ số đầu tiên .
void ChuSoDauTien(int a[],long n)
{
int s=XuLyDuLieu(a,n);
printf("\nChu So Dau Tien Cua %ld La:%d",n,a[s-1]);
}
// Hàm tính tổng tất cả các chữ số .
void TongCacChuSo(int a[],long n)
{
int s=XuLyDuLieu(a,n);
int tong=0;
for(int k=s-1;k>=0;k--)
{
tong+=a[k];
}
printf("\nTong Cac Chu So Cua So %ld La:%d",n,tong);
}
// Hàm tìm chữ số lớn nhất .
void ChuSoLonNhat(int a[],long n)
{
int s=XuLyDuLieu(a,n);
int max=a[0];
for(int k=1;k<s;k++)
{
if(a[k]>max)
{
max=a[k];
}
}
printf("\nChu So Lon Nhat Cua So %ld La:%d",n,max);
}
// Hàm đếm số lượng chữ số .
void DemSoChuSo(int a[],long n)
{
int s=XuLyDuLieu(a,n);
printf("\nSo Luong Cac Chu So Cua So %ld La:%d",n,s);
}
// Hàm hoán vị 2 số nguyên .
void HoanVi(int &x,int &y)
{
int temp=x;
x=y;
y=temp;
}
// Hàm kiểm tra xem các chữ số có khác nhau đôi một hay không ?
/* Để kiểm tra được thì đầu tiên ta đi sắp xếp mảng chứa các chữ số của số vừa nhập tăng dần . Sau đó cho vòng lặp chạy từ k = 1 -> < s (giá trị truyền về của i) . Khởi tạo 1 biến đếm = 0.Đặt điều kiện nếu a[k]!=a[k-1] thì biến đếm tăng lên 1 đơn vị . Nếu biến đếm mà bằng đúng số lượng các chữ số trong mảng - 1 tức là đếm = s-1 => Các chữ số hoàn toàn khác nhau đôi một . Nếu đếm không bằng s-1 => Có tồn tại chữ số giống nhau . */
void KiemTraChuSoKhacNhauDoiMot(int a[],long n)
{
int s=XuLyDuLieu(a,n);
int dem=0;
// Sắp mảng tăng dần bằng thuật toán Interchange Sort .
for(int k=0;k<s;k++)
{
for(int l=k+1;l<s;l++)
{
if(a[k]>a[l])
{
HoanVi(a[k],a[l]);
}
}
}
// Đặt điều kiện .
printf("\nSo %ld Co Cac Chu So Khac Nhau Doi Mot Hay Khong ? ",n);
for(int k=1;k<s;k++)
{
if(a[k]!=a[k-1])
{
dem++;
}
}
if(dem==s-1)
{
printf("\nYES");
}
else
{
printf("\nNO");
}
}
// Hàm MeNu .
void MeNu()
{
int a[MAX];
long n,tieptuc;
quaylai:NhapN(n);
printf("\n");
XuatN(n);
printf("\n");
LietKeCacChuSo(a,n);
printf("\n");
ChuSoDauTien(a,n);
printf("\n");
TongCacChuSo(a,n);
printf("\n");
ChuSoLonNhat(a,n);
printf("\n");
DemSoChuSo(a,n);
printf("\n");
KiemTraChuSoKhacNhauDoiMot(a,n);
printf("\n");
printf("\nBan co muon tiep tuc thuc hien chuong trinh hay khong ? Neu co bam phim C,nguoc lai bam bat ky 1 phim nao khac de ket thuc!");
tieptuc=getch();
if(tieptuc=='c'||tieptuc=='C')
{
system("cls");
goto quaylai;
}
}
// Hàm chính .
void main()
{
MeNu();
}
|
Nhận xét
Đăng nhận xét