码迷,mamicode.com
首页 > 编程语言 > 详细

算法竞赛入门经典 3-3 乘积的末三位 习题 3-4 计算器 习题3-5 旋转

时间:2014-11-04 14:59:23      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   for   sp   on   2014   

习题3-3 乘积的末三位

输入若干个单词,输入若干个整数(可以是正数、负数或者零),输出它们的乘积的末三位。这些整数中会混入一些由大写字母组成的字符串,你的程序应当忽略它们。提示:试试看,在执行scanf(“%d”)时输入一个字符串会怎样?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 100
#define MOD 1000
char a[MAXN];

int main(int argc, char *argv[])
{
  int i, n;
  long sum = 0, product = 1;
  int sign;
  while(scanf("%s", a) == 1)
  {
     n = strlen(a);
     for(i = 0; i < n; i++)
     {
         if(a[i] >= 'A' && a[i] <= 'Z') break; //一定要判断是怎么退出的 
         if(a[i] == '-' || a[i] == '+')  continue;
         sum = (sum*10 + a[i] - '0')%MOD;  
     }
     if(a[i] >= 'A' && a[i] <= 'Z') continue;
     product = product*sum%MOD;
     sum = 0;//这种计数用的,每次都要清零 
  }
  printf("%3d\n", product);
  system("PAUSE");	
  return 0;
}

总结:1 注意溢出

            2 for循坏里有break时,接下来的代码要判断这个for循坏是从哪退出的

            3  sum = 0 要记得清零,因为读入一个新的字符串了

习题 3-4 计算器

编写程序,读入一行恰好包含一个加号、减号或乘号的表达式,输出它的值。这个运算符保证是二元运算符,且两个数均为不超过100的非负整数。运算数和运算符可以紧挨着,也可以用一个或多个空格、TAB隔开。行首末尾均可以有空格。提示:选择合适的输入方法可以将问题简化。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 100
char a[MAXN];
 
int main(int argc, char *argv[])
{
   int i, n, x = 0, y = 0, middle; 
   
   while(fgets(a, sizeof(a), stdin))
   {
      n = strlen(a);
      for(i = 0; i < n-1; i++)
      {
         if(a[i] == '+' || a[i] == '-' || a[i] == '*')
           middle = i; 
      }
      for(i = 0; i < middle; i++)
      {
         if(a[i] == ' ') continue;
         x = x*10 + a[i] - '0';
      }
      for(i = middle+1; i < n-1; i++ )
      {
          if(a[i] == ' ') continue;
          y = y*10 + a[i] - '0';
      }
      
      switch(a[middle])
      {
      case '+':
           printf("%d\n", x+y);break;
      case '-':
           printf("%d\n", x-y);break;
      case '*':
           printf("%d\n", x*y);break;
      }
      x = 0;
      y = 0;
   }
  system("PAUSE");	
  return 0;
}

总结:1 用fgets输入最后还有一个\n 和\0,不过strlen不降\0算进去

            2 x y要清零

转一个更简单的方法

#include<stdio.h> 
#define MAXN 5000  
int main()  
{   int a,b,c; 
    char f;      
    scanf("%d",&a);     
    scanf("%c",&f);  
    while((f!='+')&&(f!='-')&&(f!='*'))
       scanf("%c",&f);     
       scanf("%d",&b); 
       if (f=='+') c=a+b;  
       else  if(f=='-') c=a-b; 
       else    c=a*b;      
    printf("%d",c);  return 0; 
}  

习题 3-5 旋转

输入一个n*n的字符矩阵,把它左转90度后输出。


#include <stdlib.h>
#define MAXN 100
char a[MAXN][MAXN];

int main(int argc, char *argv[])
{
   int n, i, j;
   scanf("%d\n", &n);
   
   for(i = 0; i < n; i++)
      scanf("%s", a[i]);
     
     /*
   for(i = 0; i < n; i++)
      {
      for(j = 0; j < n; j++)
         scanf("%c", &a[i][j]); 
      }
  */
   for(j = n-1; j >= 0; j--)
      {
      for(i = 0; i < n; i++)
         {
            printf("%c", a[i][j]);
         }
      printf("\n");
      }   
   system("PAUSE");	
   return 0;
}

总结:scanf("%c")会将字符后的空格或换行也读进去????

算法竞赛入门经典 3-3 乘积的末三位 习题 3-4 计算器 习题3-5 旋转

标签:style   blog   io   color   ar   for   sp   on   2014   

原文地址:http://blog.csdn.net/oceaniwater/article/details/40784819

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!