注册 登录
编程论坛 C语言论坛

求教教孩子吧,不会做了

帅的少年说 发布于 2022-11-29 18:59, 814 次点击
题目描述
按照输入模式输出指定格式的计算结果:
计算方法包括+、-、*,计算过程遵循运算优先级。
数值表示方法包括O、D、H,分别表示有前缀八进制、十进制、有前缀十六进制。
输入说明
输入三行,三行分别为:
第一行为三个正整数a、b、c;(1<=a,b,c<=100)
第二行为两个计算方法字符;
第三行为四个最终输出的数值表示方法字符;
每行中的元素均以空格分隔

输入样例
44 82 92
+ *
D H O H
输出说明
输出一行,为模式计算结果
输出样例
44+0X52*0134=0X1DA4
1 回复
#2
rjsp2022-11-29 19:37
如果结果为负怎么处理?

程序代码:
#include <stdio.h>

int foo( int x, int y, char opt )
{
    switch( opt )
    {
    case '+': return x+y;
    case '-': return x-y;
    case '*': return x*y;
    }
    return 0;
}

int bar( int x,  char radix )
{
    if( x < 0 )
    {
        putchar( '-' );
        x = -x;
    }

    switch( radix )
    {
    case 'O': return printf( "%#o", x );
    case 'D': return printf( "%d", x );
    case 'H': return printf( "%#X", x );
    }
    return 0;
}

int main( void )
{
    int a, b, c;
    char d1, d2;
    char e1, e2, e3, e4;
    scanf( "%d%d%d %c %c %c %c %c %c", &a,&b,&c, &d1,&d2, &e1,&e2,&e3,&e4 );

    int result;
    if( d2 == '*' )
        result = foo( a, foo(b,c,d2), d1 );
    else
        result = foo( foo(a,b,d1), c, d2 );

    bar( a, e1 );
    putchar( d1 );
    bar( b, e2 );
    putchar( d2 );
    bar( c, e3 );
    putchar( '=' );
    bar( result, e4 );
}
1