C 打印大于或等于N1且小于或等于N2的11的倍数
编写一个执行以下操作的程序:C 打印大于或等于N1且小于或等于N2的11的倍数,c,C,编写一个执行以下操作的程序: 要求用户输入一个整数N1 要求用户输入一个整数N2 打印大于或等于N1且小于或等于N2的11的倍数 我已经这样做了,但是程序要求打印出多少个数字可以与11相乘,但必须大于N1,小于N2,这就是我遇到的问题 #include <stdio.h> int main () { int N1; printf("Enter an integer N1: "); scanf("%d", &
- 要求用户输入一个整数N1
- 要求用户输入一个整数N2
- 打印大于或等于N1且小于或等于N2的11的倍数
#include <stdio.h>
int main () {
int N1;
printf("Enter an integer N1: ");
scanf("%d", &N1);
int N2;
printf("Enter an integer N2: ");
scanf("%d", &N2);
int i = N1;
while (i <= N2)
{
if (i % 11 == 0)
{
printf("%d\n", i);
}
i = i + 1;
}
printf("Exiting...");
return 0;
}
#包括
int main(){
int-N1;
printf(“输入一个整数N1:”);
scanf(“%d”&N1);
int N2;
printf(“输入一个整数N2:”);
扫描频率(“%d”和“N2”);
int i=N1;
而(i你可以使用一个额外的计数器变量来跟踪这一点。一些额外的改进:
使用scanf
时,最好始终在输入格式前加一个空格,这样缓冲区中的任何前导空格都会被使用,但不会被格式化为输出变量,还可以检查其返回值是否成功(它返回一个int
,表示从字符串中成功读取的格式说明符的数量)
您不需要一次迭代一个。您可以将N1
增加到11的下一个倍数,然后继续增加11,直到它达到N2
的值
#include <stdio.h>
int main()
{
int N1;
printf("Enter an integer N1: ");
if (scanf(" %d", &N1) != 1)
{
// Handle scanf failure
}
int N2;
printf("Enter an integer N2: ");
if (scanf(" %d", &N2) != 1)
{
// Handle scanf failure
}
while (N1 % 11 != 0)
{
N1++;
}
int count = 0;
while (N1 < N2)
{
printf("%d\n", N1);
N1 += 11;
count++;
}
printf("Saw %d multiples of 11 in this range.\n", count);
printf("Exiting...");
return 0;
}
#包括
int main()
{
int-N1;
printf(“输入一个整数N1:”);
如果(扫描频率(“%d”,&N1)!=1)
{
//处理扫描失败
}
int N2;
printf(“输入一个整数N2:”);
如果(扫描频率(“%d”,&N2)!=1)
{
//处理扫描失败
}
而(N1%11!=0)
{
N1++;
}
整数计数=0;
而(N1
对于这个答案,我首先复制了您的代码,从Govind Parmar的答案中添加了scanf
改进,并添加了一个计数器变量
现在,我想在Eugene Sh.的评论的基础上,完全去掉循环。这意味着我的答案不会打印出11的每一个倍数,但你也不需要这样做
首先,我们需要检查N2>=N1
是否为真。当我们使用循环时,如果此条件为假,则循环不会执行,但当我们摆脱循环时,我们需要手动检查此条件
对于问题的主要部分,可以这样想:您有一个数字范围,从N1
开始,到N2
结束。您需要确定11的倍数在该范围内。为此,请找到该范围内11的最小倍数,找到该范围内11的最大倍数,并找出有多少倍数他们中间有11人
要查找大于或等于N1
的11的最小倍数,请首先查找小于或等于11的最大倍数(N1/11
),然后根据需要添加11
要找到11中小于或等于N2
的最大倍数,只需执行N2/11
分别调用这些倍数最小倍数
和最大倍数
。现在,要找到总共有多少倍数,请执行(最大倍数-最小倍数)/11+1
总而言之:
#include <stdio.h>
int main () {
int N1;
printf("Enter an integer N1: ");
if (scanf(" %d", &N1) != 1) {
// Handle scanf failure
}
int N2;
printf("Enter an integer N2: ");
if (scanf(" %d", &N2) != 1) {
// Handle scanf failure
}
int count;
if (N2 >= N1) {
int smallest_multiple;
int largest_multiple;
smallest_multiple = N1 / 11;
if (smallest_multiple < N1) {
smallest_multiple += 11;
}
largest_multiple = N2 / 11;
if (largest_multiple >= smallest_multiple) {
count = (largest_multiple - smallest_multiple) / 11 + 1;
} else {
count = 0;
}
} else {
count = 0;
}
printf("Saw %d multiples of 11 in this range.\n", count);
printf("Exiting...");
return 0;
}
#包括
int main(){
int-N1;
printf(“输入一个整数N1:”);
如果(扫描频率(“%d”,&N1)!=1){
//处理扫描失败
}
int N2;
printf(“输入一个整数N2:”);
如果(扫描频率(“%d”,&N2)!=1){
//处理扫描失败
}
整数计数;
如果(N2>=N1){
整数倍;
整数倍;
最小_倍数=N1/11;
if(最小_倍数=最小\u倍数){
计数=(最大倍数-最小倍数)/11+1;
}否则{
计数=0;
}
}否则{
计数=0;
}
printf(“在此范围内看到了11的%d倍。\n”,计数);
printf(“退出…”);
返回0;
}
这个答案可能有一个问题:如果N1<0
,它可能无法正常工作。不幸的是,大多数C算术运算符指南在谈到除法时似乎忽略了负数。到目前为止,我发现最好的答案是:
商按实现定义的方向四舍五入。(直到C++11)
商被截断为零(小数部分被丢弃)
当我知道更多时,我会更新这个答案
编辑:我发现我的原始答案有问题。如果范围内没有11的倍数,则最小倍数
将大于N2
(超出范围),最大倍数
将小于N1
(超出范围)和最大\u倍数-最小\u倍数==-11
。我已经编辑了我的答案来测试这一点。这里真的不需要循环。想想你用纸和笔怎么说。我太累了,写不出正确的答案,但基本上:在顶部声明一个变量j
,初始化为零,每次递增de>i%11==0
(在你现有的if
块中),并在最后打印出来。是的,我完全同意你刚才所做的,但问题是确定有多少个数字可以与小于N2、大于N1的11相乘!@watushi我的错误;重新阅读你的帖子并更新我的答案。:)真的很感激,老板!我正在学习成为一名软件工程师,这是我第一次学习C语言,所以即使是一个简单的问题也能解决